限制 UIScrollView 内的 UILabel 的高度
Posted
技术标签:
【中文标题】限制 UIScrollView 内的 UILabel 的高度【英文标题】:Limit the height of a UILabel inside a UIScrollView 【发布时间】:2017-04-25 06:00:54 【问题描述】:我在 UIScrollView
中有一个 UILabel,UIScrollView
的 contentSize 由 UILabel
中的文本量决定。通过使高度、宽度和纵横比约束为可选,我设法为 UIScrollView
内的 contentView 定义了最小高度。
这就是UIScrollView
的层次结构的样子 -
UIScrollView
contentView
UILabel
在某些情况下,即使文本很大并且使标签超出其框架,我希望将UILabel
的框架粘贴到它的方形框架上,而多余的文本会被截断。我正在使用自动布局,所以我相信仅通过设置 UILabel
的框架是不可能的,它与更改约束的优先级有关。
UILabel
的约束 -
UILabel
的前导、尾随、顶部和底部连接到 contentView。
UISCrollView
的约束-
必填
超级视图的尾随、前导、顶部和底部,即UIScrollView
可选
与超级视图 (UIScrollView
) 的高度和宽度相等,纵横比 = 1:1
编辑
我需要这样做,当我将UILabel
的lineBreakMode
设置为NSLineBreakByTruncatingTail
时,文本会自动被截断,textLabel.text
只返回可见文本。
【问题讨论】:
为什么不用 UITextView 而不是 UILabel? @AbdulWaheed 由于某些其他限制,我不能这样做 使用表格视图代替滚动视图。 我会说这更像是一个黑客@KKRocks 啊,没有从问题中理解这一点 - 如果您有一个IBOutlet
约束,您可以在必要时简单地禁用/启用它,甚至交换约束。
【参考方案1】:
好的,如果我对所有内容都理解正确,您希望有一个可展开的标签,既可以显示整个文本,也可以是方形。这应该像启用/禁用约束一样简单,例如label.height <= label.width
(或==
,这取决于您希望它看起来像如果文本较少则适合方形标签)。您可以在界面生成器中创建此约束,为其添加一个出口,然后只需执行以下操作:self.labelSquareConstraint.active = YES/NO;
关于您编辑中的问题:没有简单的方法可以从标签中获取文本的可见部分,但是关于此的一些线程,例如:Get truncated text from UILabelUILabel visible part of textCalculate the range of visible text in UILabel
【讨论】:
我一直在使用您提供的第三个链接中的代码。不幸的是,它返回的子字符串太大而无法放入UILabel
我看到 2 种不同的方法来解决这个问题 - 1. 计算适合方形框架的文本数量并设置文本或 2. 让标签以某种方式贴在方形框架上,然后仍然计算使第二种方法完全无用的可见文本
第三个链接的第二个答案为我做了。尽管对于某些字体来说有点不准确,但它做得足够好以上是关于限制 UIScrollView 内的 UILabel 的高度的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 内的 UIScrollView 时滚动
分页 UIScrollView 内的 UIScrollView
UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer
UIScrollview内的UIView内的UIButton,ARC问题
Swift - 通过点击 ScrollView 内的 ViewController 内的按钮来滚动 UIScrollView