When presenting a new view with a UIBarButtonSystemItemCompose button in the navigation bar, the position is slightly off and adjusts after the view has come into view.
I used Sergey's answer, but kept an empty space right of my button. I fixed this with a negative spacer, which now works beautifully:
UIBarButtonItem* composeBarButtonItem =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose
target:nil
action:nil];
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil];
negativeSpacer.width = -6;
UIBarButtonItem *dumbBarButtonItem = [UIBarButtonItem new];
self.navigationItem.rightBarButtonItems = @[dumbBarButtonItem, negativeSpacer, self.composeBarButtonItem];
it might happen of animation
try this one. [self.navigationItem setRightBarButtonItem:composeBarButtonItem animated:NO];
hopefully helped :)
I think this is problem of UIBarButtonSystemItemCompose
. need some correction from apple developer team. Untill apple don't get resolve this bug. you can create your custom button and set it to rightBarButtonItem
using following code.
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"compose.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonAction:)forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(0, 0, 53, 31)];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.rightBarButtonItem = barButton;
-(void)buttonAction:(id)sender{
NSLog(@"Click");
}
Hope this help you.
Yes, this is IOS8 bug.
It happens because jumping not a navigation bar item position, its jumping image position inside compose item. This item type seems hasn't override for push animation or something similar, as for example back button.
I think you should create bug on radar and for fix your current trouble, just create custom UIBarButtonItem with the same image.
Nice observation, This problem solved in viewDidAppear
. Can you please check this..
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
UIBarButtonItem* composeBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil];
[self.navigationItem setRightBarButtonItem:composeBarButtonItem animated:YES];
}
This might help you :)
This is definitely a bug in iOS 8.0. This 'jump' occurs before viewDidAppear
. Here is workaround for this - add another 'dumb'/empty item:
UIBarButtonItem* composeBarButtonItem =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose
target:nil
action:nil];
UIBarButtonItem *dumbBarButtonItem = [UIBarButtonItem new];
self.navigationItem.rightBarButtonItems = @[dumbBarButtonItem, composeBarButtonItem];