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

k1t*_*1th 11 iphone objective-c uinavigationbar uiview ios

在我的UINavigation栏中添加了一个带有多个UIViews的XIB,左右栏按钮项的定位是关闭的:

导航栏另外还有XIB中的UIView

XIB中的视图只是一个视图控制器的出口,但不是主视图.它通过以下方式显示:

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
Run Code Online (Sandbox Code Playgroud)

我有另一个更简单的视图,它直接绑定到视图控制器的视图属性 - 正如预期的那样 - 看起来很正常.

正常的导航栏

所有视图都有自动布局.约束很好.我尝试了很多不同的东西,但无法提出修复(或者说是理由).导航栏和项目只是普通的香草酒吧按钮项目,没有任何像外观代理等...

在7.1 sim中,一切看起来都很正常.

有人见过这个吗?

谢谢

[编辑]

我找到了解决方案但不是原因:

如果我而不是

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
Run Code Online (Sandbox Code Playgroud)

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

用这个:

[UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
    [self.view addSubview:self.settingsView];
} completion:nil];
Run Code Online (Sandbox Code Playgroud)

它将新视图添加为现有UIViewControllers视图的子视图,一切都很好.

我想知道这个bug和UINavigationBars是否以一种奇怪的方式呈现,如果包含在动态添加到窗口的视图中...

Kam*_*pai 2

不确定发生了什么事UIBarButtonItem。它应该通过自动布局进行排列,并且必须运行良好。其中一项约束可能与其他约束发生冲突或被误导。

如果您无法解决它。我还为您提供了另一种解决方案。您需要UIBarButtonItem在 VC 中以编程方式创建。

这个想法是在添加之前从左右填充分配空间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]];
Run Code Online (Sandbox Code Playgroud)