【发布时间】:2013-07-18 17:13:32
【问题描述】:
我喜欢将我的视图创建为独立的 Xib 文件,然后实例化它们并添加为子视图。
因此,在使用UINavigationBar 时,我希望能够做同样的事情,首先从 Xib 创建我的自定义视图,然后将其作为自定义视图添加到 UIBarButtonItem:
UIBarButtonItem *anItem = [[UIBarButtonItem alloc] initWithCustomView:_myCustomView];
然后添加到导航栏:
self.navigationBar.topItem.rightBarButtonItems = @[ anItem, anotherItem ];
到目前为止一切顺利。
现在,_myCustomView 使用自动布局 (AL),我认为这不会有问题。 并非如此。我几乎尝试了所有方法。没有任何效果。我什至尝试将自定义视图添加为具有导航栏的控制器的子视图。认为作为视图层次结构中的兄弟姐妹,AL 会将其视为UINavigationBar 之外的常规视图。
那也没用。控制器的updateViewConstraints 被调用但从未应用。视图的初始帧保持在CGRectZero。就好像 AL 看到视图位于 UINavigationBar 之上,即使是同级,并决定它不需要布局。
当然,我试过bringSubviewToFront、translatesAutoresizingMaskIntoConstraintstranslatesAutoresizingMaskIntoConstraints等等。后者给了可爱:
由于未捕获的异常而终止应用 'NSInternalInconsistencyException',原因:'自动布局仍然 执行 -layoutSubviews 后需要。我的导航栏 -layoutSubviews 的实现需要调用 super.'
所以,问题是,有没有人从 Xib 加载了一个带有 AL 的自定义视图,并在 UIBarButtonItem 上成功地将其设置为 customView?如果有,怎么做?
【问题讨论】:
-
我实际上还没有为它提交雷达,但我也遇到了这个问题,这似乎是一个 iOS 6 错误。以编程方式创建 UIBarButtonItem 及其视图会出现同样的问题。
-
您找到解决此问题的方法了吗?
-
关于该主题的任何消息?我想我在 iOS 7 中仍然有类似的问题(尽管有一个工具栏)。
标签: uinavigationbar uibarbuttonitem autolayout