我创建了自己的UITabBar
(只是一个UIView
实例)的实现。Autolayout:旋转后的UIView帧错误
这个UIView
包含3个TabBarItem
实例。甲TabBarItem
是UIView
子类,并且每个包含以下UI控件:
UIImageView
UILabel
TabBarBadge
(定制UIView
子类)
我在一个布局视图层次结构使用自动布局的故事板。
标签栏项目的徽章应定位成使徽章的y中心与图像视图的顶部边缘对齐,并且它应该与图像视图的右侧对齐,同时4点重叠(所以,徽章的左边缘与图像视图的右边缘对齐,常数为-4)。
这适用于加载应用程序时,无论是在纵向还是横向模式。不管哪种情况,旋转完成后,旋转设备都会在徽章框架错误的地方旋转。
下面是有问题的NSLayoutConstraint
的控制台打印输出:
<NSLayoutConstraint H:[UIImageView]-(-4)-[TabBarBadge] (active)>
这正是我所期待的那样。
下面是来自TabBarBadge
有问题的控制台打印输出(肖像模式;正确演示):
<TabBarBadge frame = (80.6667 0; 36 20); text = '67'; autoresize = RM+BM>
下面是来自TabBarBadge
有问题的控制台打印输出(风景模式;不正确演示):
<TabBarBadge frame = (80.6667 0; 36 20); text = '67'; autoresize = RM+BM>
因此,当旋转发生时,您可以看到框架未更改/更新。
这里有几个屏幕截图:
肖像,正确的显示
风景,不正确的显示
约束(限制的打印输出以上是从这个看法)
那么,我有什么困惑的是,其余的TabBarItem
正在更新正确。 UIImageView
和UILabel
会自动更新。为什么这一帧没有正确更新?
@matt你看到最后一张截图吗?它来自视图调试器。而'NSLayoutConstraint'的打印输出是高亮约束的描述。 – mbm29414
@matt是的。最后的截图来自视图调试器。 “NSLayoutConstraint”的打印输出来自视图调试器。他们不匹配。它显示了一个正确配置的约束,但是该框架对于约束的设置不正确。我不确定你还有什么其他建议。 – mbm29414
@matt我甚至改变了它,并删除了我上面显示的NSLayoutConstraint,用一个约束将视图对齐到它的超级视图的中心,向右偏移一个静态数量(它将它放置在相同的位置地点)。发生同样的问题。查看调试器仍然显示徽章的正确设置。难道是因为这个'UIView'子类有自己的'drawRect:'方法吗?我想不出其他任何与这种观点不同的东西。 – mbm29414