我在屏幕上放置了一个带有自动布局的 UILabel,但是当我隐藏导航栏时,它会导致标签“抽搐”一秒钟 [重复]
Posted
技术标签:
【中文标题】我在屏幕上放置了一个带有自动布局的 UILabel,但是当我隐藏导航栏时,它会导致标签“抽搐”一秒钟 [重复]【英文标题】:I have a UILabel positioned on the screen with autolayout, but when I hide the navigation bar it causes the label to "twitch" for a second [duplicate] 【发布时间】:2013-06-24 16:03:45 【问题描述】:项目:http://cl.ly/1T2K0V3w1P21
最好通过项目查看,它是一个小下载,被剥离到仅视图控制器。
基本上,我的 UILabel 通过自动布局完美地保持在原位,但是当我隐藏导航栏时(您可以在项目中通过在任何地方点击屏幕来执行此操作),它会导致它抽搐。无论导航栏发生什么情况,如何让它保持在完全相同的位置?
它似乎是动画(我想要的)导致 AutoLayout 变得混乱。
标签上的约束如下所示:
有人可以就我做错了什么提供一些建议吗?
【问题讨论】:
我对这种方法有点困惑,据标签知道它在同一个位置并且整个视图向上移动,您可以添加和减去每个导航栏的空间时间,但是如果您想继续这个项目,那么您可能需要考虑另一种方式,例如使用顶部的按钮或工具栏并保持视图静止。尝试关闭自动布局,这实际上是一种负担,关闭它后您的 uilabel 看起来会更流畅,并且其他一些更改以及较低的文本并没有做那种奇怪的“弹出”进出。 我想使用自动布局,尽管它存在问题,但总体上似乎是有利的。而且我不知道您在第一段/句子中到底在说什么。 【参考方案1】:代替底部空间约束,您可以尝试从标签(常量中为 22)定义顶部空间约束到超级视图,将其作为 IBOutlet 连接到您的视图属性,并在导航栏时对其进行动画处理被隐藏或显示。
例如,我将顶部空间属性声明为 topSpaceConstraint:
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topSpaceConstraint;
然后在 hideControls 方法中,我可以为约束设置动画:
- (void)hideControls:(BOOL)visible
if (visible)
[UIView animateWithDuration:UINavigationControllerHideShowBarDuration animations:^
self.topSpaceConstraint.constant = 66; //44 is the navigation bar height, you need to find a way not to hardcode this
[self.view layoutIfNeeded];
];
else
[UIView animateWithDuration:UINavigationControllerHideShowBarDuration animations:^
self.topSpaceConstraint.constant = 22;
[self.view layoutIfNeeded];
];
[self.navigationController setNavigationBarHidden:visible animated:YES];
self.backFiftyWordsButton.hidden = visible;
self.forwardFiftyWordsButton.hidden = visible;
self.WPMLabel.hidden = visible;
self.timeRemainingLabel.hidden = visible;
【讨论】:
以上是关于我在屏幕上放置了一个带有自动布局的 UILabel,但是当我隐藏导航栏时,它会导致标签“抽搐”一秒钟 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
自动布局在 x 轴上居中 uilabel 适合内容,uiimage 跟随在左侧