进入视图时,撰写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];
希望帮助:)