我喜欢将视图创建为独立的 Xib 文件,然后实例化它们并添加为子视图。
所以,当与一个UINavigationBar
,我希望能够做同样的事情,首先从 Xib 创建我的自定义视图,然后将其作为自定义视图添加到UIBarButtonItem
:
UIBarButtonItem *anItem = [[UIBarButtonItem alloc] initWithCustomView:_myCustomView];
然后添加到导航栏:
self.navigationBar.topItem.rightBarButtonItems = @[ anItem, anotherItem ];
到目前为止,一切都很好。
Now, _myCustomView
使用自动布局(AL),我认为这不会有问题。事实并非如此。我已经尝试了几乎所有的事情。没有任何效果。我什至尝试将自定义视图添加为具有导航栏的控制器的子视图。认为作为视图层次结构中的兄弟,AL 会将其视为外部的常规视图。UINavigationBar
.
那也没用。控制器的updateViewConstraints
被调用但从未应用。视图的初始帧停留在CGRectZero
。就好像 AL 看到视图位于UINavigationBar
,即使作为兄弟姐妹,并决定不需要布局。
当然,我已经尝试过bringSubviewToFront
, translatesAutoresizingMaskIntoConstraintstranslatesAutoresizingMaskIntoConstraints
, 等等。后者给出了可爱的:
由于未捕获的异常而终止应用程序
'NSInternalInconsistencyException',原因:'自动布局仍然
执行-layoutSubviews 后需要。我的导航栏
-layoutSubviews 的实现需要调用 super。
所以,问题是,有没有人从 Xib 加载带有 AL 的自定义视图,并成功将其设置为customView
on a UIBarButtonItem
?如果是这样,怎么办?