【问题标题】:Using SizeToFit() to Top Align UILabel Causes Jumping使用 SizeToFit() 顶部对齐 UILabel 导致跳转
【发布时间】:2015-08-13 13:27:27
【问题描述】:

以下代码用于将 UILabel 中的文本垂直对齐到视图框的左上角。但是,它会导致文本在正确的垂直顶部对齐和垂直居中之间来回跳转。它跳跃的节奏似乎与位置更新率有关。

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {

    var userlocation: CLLocation = locations[0] as! CLLocation

    CLGeocoder().reverseGeocodeLocation(userlocation, completionHandler: {
        (placemarks, error) -> Void in

        if( error != nil )
        {
            println("Error: \(error.localizedDescription)")
            return
        }

        if( placemarks.count > 0 )
        {
            let placeMark = placemarks[0] as! CLPlacemark
            self.nearestAddressLabel.text = ABCreateStringWithAddressDictionary(placeMark.addressDictionary, false);

            self.nearestAddressLabel.sizeToFit()
        }
        else
        {
            println("No placemarks!")
        }

    })
}

问题的GIF:https://imgflip.com/gif/m82jf

知道如何避免这种地狱般的跳跃吗?

【问题讨论】:

  • 为什么地址变化如此频繁?你能控制吗?
  • UILabel 框架对于文本来说是否太大?如果您将标签的backgroundColor 临时设置为UIColor.purpleColor(),您可以轻松看到这一点
  • 您的标签也是在情节提要中创建的吗?
  • @MichaelL:它的变化与位置的更新一样快。该应用程序正在尝试显示最近的地址。它只是一个测试/学习应用程序。
  • @Dash 标签是在情节提要中创建的,是的。您的背景颜色提示很有启发性 - 看起来正在发生的事情是我的 sizeToFit() 调用正在调整标签的大小以适应文本,但由于某种原因,每次它跳转时标签看起来都变大了(以匹配我的大小在情节提要中)并且文本在处于该状态时无法正确垂直对齐顶部。

标签: ios swift uilabel


【解决方案1】:

更新:

如果您使用故事板和自动布局,则不应使用sizeToFit()sizeToFit() 是“旧”方式的一部分,预自动布局,如果 Storyboard 使用任何 Constraints,将不会按预期运行。

在界面生成器中:

  • Lines 设置为 0(允许多行)
  • 使用任何约束
  • 根据需要定位标签
  • 宽度添加一个固定的约束
  • 使用小于或等于高度添加约束

这将确保位置正确,并允许自动布局在内容更新时根据需要调整 UILabel 的高度。

更新 2:

不完全确定我为什么被否决,因为建议的答案有效。 在这个例子中,我使用计时器来更新我的标签,查看结果:

【讨论】:

  • 这本质上就是我所做的,尽管我没有通过代码指定框架,而是在情节提要中这样做了。是否有任何理由该方法行不通?
猜你喜欢
  • 2014-12-15
  • 2013-10-31
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 1970-01-01
相关资源
最近更新 更多