我喜欢将我的视图创建为独立的 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 customView
on a UIBarButtonItem
?如果是这样,怎么做?