使用 UINavigationBar 和 UIBarButtonItem 自动布局

2023-12-19

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


看起来像重复的iOS 自动布局和 UIToolbar/UIBarButtonItems https://stackoverflow.com/questions/14982302/ios-autolayout-and-uitoolbar-uibarbuttonitems

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 UINavigationBar 和 UIBarButtonItem 自动布局 的相关文章

随机推荐