当 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 文本不触发自动布局

我在屏幕上放置了一个带有自动布局的 UILabel,但是当我隐藏导航栏时,它会导致标签“抽搐”一秒钟 [重复]

根据自动布局更改 UILabel 中的字体大小(swift)

在自动布局中隐藏 UITextView 和 UILabel