如何限制从顶部定位我的标签,但在隐藏导航栏时不让它移动(因为它会调整视图高度)?
Posted
技术标签:
【中文标题】如何限制从顶部定位我的标签,但在隐藏导航栏时不让它移动(因为它会调整视图高度)?【英文标题】:How do I make a constraint to position my label from the top, but not have it move when I hide the navigation bar (as it adjusts height of view)? 【发布时间】:2013-08-02 00:35:38 【问题描述】:长话短说,我想将我的 UILabel 放置在距离屏幕顶部 150pt 的位置。这使得它在 4 英寸 ios 设备或 3.5 英寸 iOS 设备上都与顶部保持良好的距离。
但是,一旦我使用[self.navigationController setNavigationBarHidden:YES animated:NO];
,导航栏就会隐藏,这会导致视图调整大小并变高。这导致我的 UILabel 向上跳跃,我不希望它这样做。这是用户想要进入全屏视图的时候,在这种情况下,事情不应该跳来跳去。
现在您可能会说,从视图底部进行约束。这在理论上是可行的,但它会导致 UILabel 在 iPhone 5 上离屏幕太远。我可以对值进行硬编码,但这似乎不太符合 Auto Layout 的精神。
基本上,一个完美的解决方案是能够将约束设置在屏幕而不是视图的顶部。这样的事情可能吗?如果没有,我该怎么做?
【问题讨论】:
【参考方案1】:为顶部约束创建一个 IBOutlet(在我的示例中将其称为 topCon),并在隐藏或取消隐藏时从约束的常量中添加或减去条的高度。
- (IBAction)hideNavBar:(UIButton *)sender
self.navigationController.navigationBarHidden = !self.navigationController.navigationBarHidden;
if (self.navigationController.navigationBarHidden)
self.topCon.constant = self.topCon.constant + self.navigationController.navigationBar.frame.size.height;
else
self.topCon.constant = self.topCon.constant - self.navigationController.navigationBar.frame.size.height;
这将在导航栏具有不同高度的纵向和横向模式下正常工作。
【讨论】:
【参考方案2】:为什么不使用导航栏高度(self.navigationController.navigationBar.frame.size.height),根据导航栏是否隐藏/可见上下移动UILabel?
这样,您无需对任何内容进行硬编码,而是使用 UINavigationBar 属性。
【讨论】:
【参考方案3】:不幸的是,AutoLayout 处理的是视图而不是屏幕。 以下是一些解决方案:
1:您可以说,每当 layoutsubviews(或执行类似的触发器)时自行重新定位。
2:您还可以将高度设置为可变,以便在可用时占用松弛。
3:添加一个从底部锚定并填充到顶部的视图(您可以调整视图以保持相同的大小或更改,并将此标签添加到该视图的顶部并带有约束)。
【讨论】:
以上是关于如何限制从顶部定位我的标签,但在隐藏导航栏时不让它移动(因为它会调整视图高度)?的主要内容,如果未能解决你的问题,请参考以下文章