Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.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 在子视图中自动布局多行UILabel;第一次布局时高度不正确_Ios_Swift_Autolayout_Uilabel - Fatal编程技术网

Ios 在子视图中自动布局多行UILabel;第一次布局时高度不正确

Ios 在子视图中自动布局多行UILabel;第一次布局时高度不正确,ios,swift,autolayout,uilabel,Ios,Swift,Autolayout,Uilabel,我已经阅读了许多关于如何使多行自动布局标签工作的问题和教程,其中一些解决方案似乎有效,但仅在第二次显示子视图时 我有一个全屏视图控制器,其中有一个垂直居中的容器。子视图控制器在容器内外交换,容器高度拉伸/收缩以适应给定子视图的高度。我的大多数子视图都有固定的高度,但有一个标签的高度(因此子视图高度)是基于标签内容的。所有子视图都具有自上而下的约束。我试过: 使用自定义的ui标签,在layoutSubviews方法中设置其preferredMaxLayoutWidth 使用自定义的ui标签,在设置

我已经阅读了许多关于如何使多行自动布局标签工作的问题和教程,其中一些解决方案似乎有效,但仅在第二次显示子视图时

我有一个全屏视图控制器,其中有一个垂直居中的容器。子视图控制器在容器内外交换,容器高度拉伸/收缩以适应给定子视图的高度。我的大多数子视图都有固定的高度,但有一个标签的高度(因此子视图高度)是基于标签内容的。所有子视图都具有自上而下的约束。我试过:

  • 使用自定义的
    ui标签
    ,在
    layoutSubviews
    方法中设置其
    preferredMaxLayoutWidth
  • 使用自定义的
    ui标签
    ,在设置边界时更新其约束,并在更新约束时设置其
    preferredMaxLayoutWidth
  • 在子视图控制器的
    viewDidLayoutSubviews
    方法中设置
    UILabel
    preferredMaxLayoutWidth
    ,并调用
    LayoutFneeded
  • 所有这些方法都有效,但仅在第二次显示子视图时有效。第一次显示子视图时,标签始终被截断。通过将“大于或等于高度”约束设置为足够大的值,我可以使标签永远不会截断,但这不是我想要的,因为这样,由于额外的填充,当文本较少时,我的子视图不再垂直居中显示

    那么,如何让子视图在第一次显示时正确更新其高度

    编辑:

    下面是我正在使用的子视图:

    这是父视图中的容器:

    您能分享一些视图的图像吗?UILabel的.numberOfLines属性的值是多少?