我在屏幕上放置了一个带有自动布局的 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,但是当我隐藏导航栏时,它会导致标签“抽搐”一秒钟 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

UIView 中的自动布局 UILabel

iPad 的自动布局问题

如何使用自动布局在屏幕中水平和垂直居中 UILabel?

自动布局在 x 轴上居中 uilabel 适合内容,uiimage 跟随在左侧

使用自动布局使 UILabel 和 UITextField 彼此相邻

带有自动布局的 uilabel 使用填充调整大小