在独立视图中使用时,iOS 8屏幕边缘上的UIBarButton项目

在我的UINavigation栏中添加了一个UIViews的XIB的左,右栏button项目的位置是closures的:

另外导航栏中的UIView在XIB中

XIB中的视图只是有一个视图控制器的出口,但不是主视图。 它显示通过:

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; 

我有另一个更简单的视图,直接绑定到视图控制器的视图属性 – 正如所料 – 看起来很正常。

正常的导航栏

所有的视图都有自动布局。 约束很好。 我尝试了许多不同的东西,但不能提出修正(或者说是一个理由)。 导航栏和项目只是简单的香草栏button项目,没有任何外观代理等等…

在7.1模拟器中,一切看起来都很正常。

任何人见过这个?

谢谢

[编辑]

我find了一个解决scheme,但不是原因:

如果我而不是

 [UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; 

它将新视图添加为UIWindow的子视图,

用这个:

 [UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ [self.view addSubview:self.settingsView]; } completion:nil]; 

它将新视图添加为现有UIViewControllers视图的子视图,一切正常。

我不知道如果这个错误和UINavigationBars呈现在一个奇怪的方式,如果包含在一个视图,dynamic地添加到窗口…

不知道UIBarButtonItem发生了UIBarButtonItem 。 它应该安排自动布局,它必须是很好的工作。 可能是与其他方面的制约冲突或误导之一。

如果你无法解决它。 我还有一个解决scheme给你。 您需要在VC中以编程方式创buildUIBarButtonItem

这个想法是在添加UIBarButtonItem之前从左侧和右侧填充分配空间。

下面的代码将指导你做的伎俩。

 UIBarButtonItem *leftPadding = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemFixedSpace target:self action:nil]; [leftPadding setWidth:5]; // Adjust width for padding from left side. UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped:)]; [self.navigationItem setLeftBarButtonItems:@[leftPadding, addButton]]; UIBarButtonItem *rightPadding = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemFixedSpace target:self action:nil]; [rightPadding setWidth:10]; // Adjust width for padding from right side. UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemDone target:self action:@selector(doneButtonTapped:)]; [self.navigationItem setRightBarButtonItems:@[rightPadding, doneButton]]; 

使用下面的代码添加button,它一定会工作。

 CGRect frameimg = CGRectMake(0, 0, 60, 30); UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg]; //[someButton setBackgroundImage:image3 forState:UIControlStateNormal]; [someButton setTitle:@"Update" forState:UIControlStateNormal]; [someButton addTarget:self action:@selector(updateProfile) forControlEvents:UIControlEventTouchUpInside]; [someButton setShowsTouchWhenHighlighted:YES]; UIBarButtonItem *menuButton =[[UIBarButtonItem alloc] initWithCustomView:someButton]; self.navigationItem.rightBarButtonItem = menuButton; 

这个问题在layoutMargins中 。

看起来像你的UINavigationBar有零余量。 每边应该有8分。