进入视图时,撰写UIBarButtonItem稍微改变位置

在导航栏中使用UIBarButtonSystemItemComposebutton呈现新视图时,该位置略微closures,并在视图进入视图后进行调整。

进入视图时,撰写按钮稍微改变位置

我认为这是iOS中的一个错误(使用8.3版本)。 它只发生在使用UIBarButtonSystemItemCompose时。 它不会发生与其他types的button(系统,文本或自定义)。

复制这个错误所需的唯一代码就是使用这个ViewController代码和可以看到的视图:

#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIBarButtonItem* composeBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:nil action:nil]; [self.navigationItem setRightBarButtonItem:composeBarButtonItem animated:YES]; } @end 

我在GitHub上创build了一个仓库,用最less的代码来重现这个问题: https : //github.com/jvdvleuten/iOSComposeBarButtonItemBug

看起来与此相关: 当UINavigationController被模态地呈现时,UIBarButtonItems移位 ,除了我的错误仅在使用UIBarButtonSystemItemCompose时出现。

有任何想法吗?

我使用了谢尔盖的回答,但是保留了我的button的空白处。 我用一个消极的隔离片修复了这个现在很漂亮的作品:

 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]; 

这绝对是iOS 8.0中的一个错误。 这个“跳转”发生在viewDidAppear之前。 这是解决方法 – 添加另一个“哑”/空项目:

 UIBarButtonItem* composeBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil]; UIBarButtonItem *dumbBarButtonItem = [UIBarButtonItem new]; self.navigationItem.rightBarButtonItems = @[dumbBarButtonItem, composeBarButtonItem]; 

一个简单的解决方法:

 let composeButton = UIBarButtonItem(image: UIImage(named: "UIButtonBarCompose"), style: .Plain, target: self, action: "compose:") self.navigationItem.rightBarButtonItem = composeButton 

我们可以通过iOS-Artwork-Extractor获得图像“UIButtonBarCompose”。

我认为这是UIBarButtonSystemItemCompose问题。 需要苹果开发团队的一些更正。 直到苹果不解决这个错误。 您可以创build自定义button,并使用以下代码将其设置为rightBarButtonItem

 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"); } 

希望这对你有所帮助。

很好的观察 ,这个问题在viewDidAppear解决了。 你能检查一下吗

 - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; UIBarButtonItem* composeBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil]; [self.navigationItem setRightBarButtonItem:composeBarButtonItem animated:YES]; } 

这可能会帮助你:)

是的,这是IOS8的错误。

这是因为跳转不是导航栏项目的位置,它在跳转图像位置内部撰写项目。 这个项目types似乎没有覆盖推animation或类似的东西,例如后退button。

我认为你应该在雷达上创buildbug,并且修复当前的麻烦,用相同的图像创build自定义的UIBarButtonItem。

它可能会发生animation

试试这个。 [self.navigationItem setRightBarButtonItem:composeBarButtonItem animated:NO];

希望帮助:)