gpt4 book ai didi

ios - 调整 UILabel 的大小以容纳插图

转载 作者:IT王子 更新时间:2023-10-29 07:34:06 24 4
gpt4 key购买 nike

我正在构建一个扫描条形码的屏幕,我需要在一些 UILabels 后面放置一个半透明屏幕,以提高在浅色背景下的可见性。

现在的屏幕是这样的:

enter image description here

我在 UILabel 上设置背景颜色以获得半透明框。我还创建了一个自定义的 UILabel 子类,以允许我使用 this approachUILabel 的边缘和文本之间设置一些填充。 .

如您在上面的屏幕中所见,UILabel 未正确调整大小以考虑填充。 “填充”只是在不改变标签宽度的情况下移动文本,导致文本被截断。

这两个标签都将包含任意长度的文本,我确实需要 UILabel 来动态调整大小。

我可以重写什么 UILabel 方法来增加标签的宽度和填充因子?

最佳答案

这是一个可以正确计算尺寸的标签类。 posted code在 Swift 3 中,但您也可以下载 Swift 2Objective-C版本。

它是如何工作的?

通过计算正确的 textRect,所有 sizeToFit 和自动布局都按预期工作。诀窍是先减去插图,然后计算原始标签边界,最后再次添加插图。

代码(Swift 5)

class NRLabel: UILabel {
var textInsets = UIEdgeInsets.zero {
didSet { invalidateIntrinsicContentSize() }
}

override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
let insetRect = bounds.inset(by: textInsets)
let textRect = super.textRect(forBounds: insetRect, limitedToNumberOfLines: numberOfLines)
let invertedInsets = UIEdgeInsets(
top: -textInsets.top,
left: -textInsets.left,
bottom: -textInsets.bottom,
right: -textInsets.right
)
return textRect.inset(by: invertedInsets)
}

override func drawText(in rect: CGRect) {
super.drawText(in: rect.inset(by: textInsets))
}
}

可选:Interface Builder 支持

如果您想在 Storyboard中设置文本插入,您可以使用以下扩展来启用 Interface Builder 支持:

@IBDesignable
extension NRLabel {

// currently UIEdgeInsets is no supported IBDesignable type,
// so we have to fan it out here:
@IBInspectable
var leftTextInset: CGFloat {
set { textInsets.left = newValue }
get { return textInsets.left }
}

// Same for the right, top and bottom edges.
}

现在您可以方便地在 IB 中设置您的插图,然后只需按 ⌘= 调整标签的大小以适合。

免责声明:

所有代码都在公共(public)领域。随心所欲。

关于ios - 调整 UILabel 的大小以容纳插图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21167226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com