最好通过项目查看,它是一个小下载,只包含视图控制器。
基本上,我的 UILabel 通过自动布局完美地保持在原位,但是当我隐藏导航栏(您可以在项目中通过在任何地方点击屏幕来执行此操作)时,它会导致它抽搐。无论导航栏发生了什么,我如何使它保持在完全相同的位置?
似乎它是动画的(我想要的)导致 AutoLayout 感到困惑。
标签上的约束如下所示:
有人可以就我做错了什么提供一些建议吗?
最好通过项目查看,它是一个小下载,只包含视图控制器。
基本上,我的 UILabel 通过自动布局完美地保持在原位,但是当我隐藏导航栏(您可以在项目中通过在任何地方点击屏幕来执行此操作)时,它会导致它抽搐。无论导航栏发生了什么,我如何使它保持在完全相同的位置?
似乎它是动画的(我想要的)导致 AutoLayout 感到困惑。
标签上的约束如下所示:
有人可以就我做错了什么提供一些建议吗?
除了底部空间约束,您可以尝试从标签(常量中为 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;
}