当 UILabel 给出尾随时,自动布局被破坏
Posted
技术标签:
【中文标题】当 UILabel 给出尾随时,自动布局被破坏【英文标题】:Autolayout is broken when UILabel given trailing 【发布时间】:2020-03-19 06:14:16 【问题描述】:如果我不提供尾随属性,它可以正常工作。 但是,如果文本很长,则会被截断。
所以我设置了尾随。 但是,这会破坏 UICollectionViewCell 的宽度。
这是我的代码
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
let width = collectionView.frame.width
return CGSize(width: width / 2, height: 53)
这是为什么呢?请帮帮我。
【问题讨论】:
设置尾随你期望什么?文本大于指定宽度时的成像情况。在这种情况下,您希望它是什么样子? 另外,你需要从 width/2 中减去(contentInsets.left + contentInsets.right) + (sectionInsets.left + sectionInsets.right) + minimumInteritemSpacing
我相信您希望它转到第二行,以防文本变大。所以编辑你的尾随约束并将 = 更改为 >=。还将标签的 Lines
属性设置为大于 1 的值。
【参考方案1】:
最简单的方法就是将标签线设置为0
@oddK - 不要将宽度设置为集合宽度/2,而是根据文本内容设置宽度,
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
let width = collectionView.frame.width
let lblWidth = "My text".getWidth(withConstrainedHeight: CGFloat(53), font: UIFont.systemFont(ofSize: 14))
return CGSize(width: lblWidth, height: 53)
//Get Width of content in label
func getWidth(withConstrainedHeight:CGFloat, font: UIFont) -> CGFloat
let viewRect = CGSize(width: .greatestFiniteMagnitude, height: withConstrainedHeight)
let getFrame = self.boundingRect(with: viewRect, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font : font], context: nil)
return getFrame.size.width
【讨论】:
我需要制作一个宽度为 1/2 的单元格。 @oddK - 然后使用标签的调整大小选项 @oddK - 您是否尝试过自动调整字体大小选项。找到我分享的附件。 让我们continue this discussion in chat. 解决了。 ***.com/questions/60755978/…以上是关于当 UILabel 给出尾随时,自动布局被破坏的主要内容,如果未能解决你的问题,请参考以下文章
Stackview中的iOS 10方形UIIMageView在隐藏时会破坏自动布局
具有自动布局配置的 UITableCell 被截断的多行 UILabel
我在屏幕上放置了一个带有自动布局的 UILabel,但是当我隐藏导航栏时,它会导致标签“抽搐”一秒钟 [重复]