Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.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_Storyboard_Uilabel_Autolayout_Multiline - Fatal编程技术网

Ios 具有自动布局的多行UILabel不起作用

Ios 具有自动布局的多行UILabel不起作用,ios,storyboard,uilabel,autolayout,multiline,Ios,Storyboard,Uilabel,Autolayout,Multiline,我试图设置约束以在静态表视图单元格中获取多行标签,但显然这对我不起作用,标签仍然在一行中。我已将numberOfLines属性设置为0,并将高度约束设置为大于或等于。我正在tableView:heightforrowatinexpath中正确设置单元格的高度。请查看我的屏幕截图以查看IB中的设置 在您提到的上述评论中,您当前没有设置首选MaxLayoutWidth。此属性告诉标签它应该在该属性值的宽度上布局文本。在UILabel.h中: 如果非零,则在确定多行标签的-intrinsicConte

我试图设置约束以在静态表视图单元格中获取多行标签,但显然这对我不起作用,标签仍然在一行中。我已将numberOfLines属性设置为0,并将高度约束设置为大于或等于。我正在
tableView:heightforrowatinexpath
中正确设置单元格的高度。请查看我的屏幕截图以查看IB中的设置


在您提到的上述评论中,您当前没有设置
首选MaxLayoutWidth
。此属性告诉标签它应该在该属性值的宽度上布局文本。在UILabel.h中:

如果非零,则在确定多行标签的-intrinsicContentSize时使用

换句话说,如果不设置该值,则标签的固有内容大小是标签绘制文本所需的宽度。如果将此属性设置为标签的边界,它将在下一行开始绘制(或者,如果
numberOfLines
为0,它将剪切文本)


在您的情况下,我可能会在
tableView:willDisplayCell:forRowAtIndexPath:
中这样做,您在上面提到的注释中没有设置
preferredMaxLayoutWidth
。此属性告诉标签它应该在该属性值的宽度上布局文本。在UILabel.h中:

如果非零,则在确定多行标签的-intrinsicContentSize时使用

换句话说,如果不设置该值,则标签的固有内容大小是标签绘制文本所需的宽度。如果将此属性设置为标签的边界,它将在下一行开始绘制(或者,如果
numberOfLines
为0,它将剪切文本)


在您的情况下,我可能会在
tableView:willDisplayCell:forRowAtIndexPath:
中这样做,您可以在代码中设置
preferredMaxLayoutWidth
,但在脚本中设计用户界面时,您仍然会看到一个长的单行标签,在边缘处被切掉。另一种方法是使用
选项Return
手动将换行符插入故事板中文本的任意位置。然后,只需将行数设置为超出文本所能容纳的行数。然后选择标签,点击
Cmd-=
。这将计算标签的固有内容大小,换行符正好位于您希望的位置


理论上,我认为设置
preferredMaxLayoutWidth
是更正确的方法,尤其是使用Autolayout。但是,我发现使用上面描述的方法更实用,因为它可以让您在设计时在故事板中看到布局,并且您可以完全控制换行符。这通常适用于文本不经常更改的标签。如果您正在动态更改标签文本,则设置
preferredMaxLayoutWidth
是首选方式。

您可以在代码中设置
preferredMaxLayoutWidth
,但在故事板中设计用户界面时,仍然会看到一个长的单行标签,在边缘处被截断。另一种方法是使用
选项Return
手动将换行符插入故事板中文本的任意位置。然后,只需将行数设置为超出文本所能容纳的行数。然后选择标签,点击
Cmd-=
。这将计算标签的固有内容大小,换行符正好位于您希望的位置


理论上,我认为设置
preferredMaxLayoutWidth
是更正确的方法,尤其是使用Autolayout。但是,我发现使用上面描述的方法更实用,因为它可以让您在设计时在故事板中看到布局,并且您可以完全控制换行符。这通常适用于文本不经常更改的标签。如果要动态更改标签文本,则设置
preferredMaxLayoutWidth
是首选方法。

什么不起作用?@scottberrevotes Sry,我更新了我的问题。标签仍在一行中地址是否足够长,可以放在两行中?您是否设置了
首选MaxLayoutWidth
?是的,我也尝试了硬编码的长字符串。不,我目前没有设置
preferredMaxLayoutWidth
,我应该在哪里设置此属性,这是否也会改变高度?有什么不起作用?@Scottberrevotes Sry,我更新了我的问题。标签仍在一行中地址是否足够长,可以放在两行中?您是否设置了
首选MaxLayoutWidth
?是的,我也尝试了硬编码的长字符串。不,我目前没有设置
preferredMaxLayoutWidth
,我应该在哪里设置此属性,这是否也会改变高度?numberOfLines=0是无限行数,因此除非他有不同的换行属性,否则它不应该剪切文本。我(认为我)是什么意思是:如果您不将
intrinsicContentSize
设置为标签的边界,并且
numberOfLines
为0,则它将删除文本。为了清晰起见,我更新了我的答案。numberOfLines=0是一个无限行数,因此除非他有一个不同的换行属性,否则它不应该删除文本。我(认为我)的意思是:如果你不将
intrinsicContentSize
设置为标签的边界,并且
numberOfLines
为0,它将删除文本。为了清楚起见,我更新了我的答案。