使用UINavigationBar和UIBarButtonItem进行自动布局

Max*_*eod 7 uinavigationbar uibarbuttonitem autolayout

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

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

UIBarButtonItem *anItem = [[UIBarButtonItem alloc] initWithCustomView:_myCustomView];
Run Code Online (Sandbox Code Playgroud)

然后添加到导航栏:

self.navigationBar.topItem.rightBarButtonItems = @[ anItem, anotherItem ];
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

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

那也行不通.控制器updateViewConstraints被调用但从未应用过.视图的初始框架保持不变CGRectZero.好像AL看到视图位于a之上UINavigationBar,即使是兄弟,也决定它不需要布局.

当然,我已经尝试了bringSubviewToFront,translatesAutoresizingMaskIntoConstraintstranslatesAutoresizingMaskIntoConstraints等等.后者给了可爱的:

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

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

Dan*_*erg 1

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

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

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