7

我喜欢将我的视图创建为独立的 Xib 文件,然后实例化它们并添加为子视图。

因此,在使用 a 时UINavigationBar,我希望能够做同样的事情,首先从 Xib 创建我的自定义视图,然后将其作为自定义视图添加到UIBarButtonItem

UIBarButtonItem *anItem = [[UIBarButtonItem alloc] initWithCustomView:_myCustomView];

然后添加到导航栏:

self.navigationBar.topItem.rightBarButtonItems = @[ anItem, anotherItem ];

到目前为止,一切都很好。

现在,_myCustomView使用自动布局(AL),我认为这不会有问题。不是这样。我几乎什么都试过了。没有任何效果。我什至尝试将自定义视图添加为具有导航栏的控制器的子视图。认为作为视图层次结构中的兄弟姐妹,AL 会将其视为UINavigationBar.

那也没有用。控制器updateViewConstraints被调用但从未应用。视图的初始帧停留在CGRectZero。就好像 AL 看到视图位于 a 之上UINavigationBar,甚至作为兄弟,并决定它不需要布局。

当然,我试过bringSubviewToFront,translatesAutoresizingMaskIntoConstraintstranslatesAutoresizingMaskIntoConstraints等等。后者给了可爱:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“执行 -layoutSubviews 后仍需要自动布局。MyNavigationBar 的 -layoutSubviews 实现需要调用 super.'

所以,问题是,有没有人从 Xib 加载了带有 AL 的自定义视图,并成功地将其设置为 a customViewon a UIBarButtonItem?如果是这样,怎么做?

4

1 回答 1

1

看起来像iOS Autolayout 和 UIToolbar/UIBarButtonItems的副本

UIBarButtonItems不继承自UIView,因此可能不完全支持在其中使用基于自动布局的自定义视图。听起来你必须做预先自动布局的事情,直到问题得到解决。我建议提交一个错误。

编辑:通过预自动布局,我的意思是直接操作视图的框架。

于 2014-08-14T23:01:12.923 回答