Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用SizeToFit()顶部对齐UILabel会导致跳转_Ios_Swift_Uilabel - Fatal编程技术网

Ios 使用SizeToFit()顶部对齐UILabel会导致跳转

Ios 使用SizeToFit()顶部对齐UILabel会导致跳转,ios,swift,uilabel,Ios,Swift,Uilabel,以下代码用于将UILabel中的文本垂直对齐到视图框的左上角。但是,它会导致文本在正确的垂直顶部对齐和垂直居中之间来回跳转。它跳跃的节奏似乎与位置更新率有关 func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { var userlocation: CLLocation = locations[0] as! CLLocation CLGeoc

以下代码用于将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!")
        }

    })
}
问题所在:

你知道我该如何避免这种可怕的跳跃吗?

更新:

如果使用故事板和自动布局,则不应使用sizeToFit。sizeToFit是旧方式、预自动布局的一部分,如果情节提要使用任何约束,它的行为将不符合预期

相反,在界面生成器中:

将“行”设置为0允许多行 根据需要使用任何约束定位标签 为宽度添加固定约束 使用小于或等于为高度添加限制 这将确保位置正确,并允许自动布局在内容更新时根据需要调整UILabels高度

更新2:

我不完全清楚为什么我会被否决,因为建议的答案是有效的。 在本例中,我使用计时器更新标签,请参见结果:

更新:

如果使用故事板和自动布局,则不应使用sizeToFit。sizeToFit是旧方式、预自动布局的一部分,如果情节提要使用任何约束,它的行为将不符合预期

相反,在界面生成器中:

将“行”设置为0允许多行 根据需要使用任何约束定位标签 为宽度添加固定约束 使用小于或等于为高度添加限制 这将确保位置正确,并允许自动布局在内容更新时根据需要调整UILabels高度

更新2:

我不完全清楚为什么我会被否决,因为建议的答案是有效的。 在本例中,我使用计时器更新标签,请参见结果:


为什么地址经常变化?你能控制吗?UILabel框架对于文本来说太大了吗?如果您临时将标签的backgroundColor设置为UIColor,您可以很容易地看到这一点。PurpleColoral那么您的标签是在故事板中创建的吗?@MichaelL:它的变化速度与位置的更新速度一样快。应用程序正在尝试显示最近的地址。这只是一个测试/学习应用程序。@是的,标签是在故事板中创建的。你的背景色提示很有启发性-看起来我的sizeToFit调用正在调整标签大小以适应文本,但由于某些原因,每次它跳转时,看起来标签越来越大,与我在故事板中的大小相匹配,并且文本在这种状态下无法正确地垂直对齐顶部。为什么地址经常更改?你能控制吗?UILabel框架对于文本来说太大了吗?如果您临时将标签的backgroundColor设置为UIColor,您可以很容易地看到这一点。PurpleColoral那么您的标签是在故事板中创建的吗?@MichaelL:它的变化速度与位置的更新速度一样快。应用程序正在尝试显示最近的地址。这只是一个测试/学习应用程序。@是的,标签是在故事板中创建的。你的背景色提示很有启发性-看起来我的sizeToFit调用正在调整标签大小以适应文本,但由于某些原因,每次它跳转时,看起来标签越来越大,以匹配我在故事板中的大小,并且文本在该状态下无法正确垂直对齐顶部。这本质上就是我所做的,尽管我在故事板中没有通过代码指定帧。有没有任何理由认为这种方法不起作用?这就是我所做的,虽然我没有通过代码指定框架,而是在情节提要中这样做。有没有任何理由认为这种方法行不通?