我喜欢将我的视图作为独立的Xib文件创建,然后实例化它们并将它们添加为子视图。
因此,在使用UINavigationBar
时,我期望能够做同样的事情,首先从Xib创建我的自定义视图,然后将其作为自定义视图添加到UIBarButtonItem
中:
UIBarButtonItem *anItem = [[UIBarButtonItem alloc] initWithCustomView:_myCustomView];
然后将其添加到导航栏中:
self.navigationBar.topItem.rightBarButtonItems = @[ anItem, anotherItem ];
到目前为止一切都还不错。现在,
_myCustomView
使用了自动布局(AL),我以为这不是问题。但事实并非如此。 我已经尝试了几乎所有的方法,但没有一个能起作用。我甚至试图将自定义视图作为具有导航栏的控制器的子视图添加。认为它们作为视图层级结构中的兄弟姐妹,自动布局会将其视为导航栏之外的常规视图。
但这也行不通。虽然调用了控制器的updateViewConstraints
方法,但从未应用到视图的初始框架上,该视图最初的框架仍然保持CGRectZero
。就好像自动布局看到视图在UINavigationBar
顶部,即使视图作为兄弟姐妹,它也决定不需要进行布局。
当然,我尝试过使用bringSubviewToFront
, translatesAutoresizingMaskIntoConstraintstranslatesAutoresizingMaskIntoConstraints
等方法。后者给出了如下提示:
终止应用程序,原因:执行-layoutSubviews后仍需要自动布局。MyNavigationBar 的 -layoutSubviews 实现需要调用 super。
因此,问题是,是否有人从 Xib 加载了具有 AL 的自定义视图,并成功将其设置为 UIBarButtonItem
上的customView
? 如果有,如何做到的呢?