gpt4 book ai didi

autolayout - UILabel 子类 - 自定义 'drawRect' 方法导致文本被截断/不显示

转载 作者:行者123 更新时间:2023-12-04 02:22:21 26 4
gpt4 key购买 nike

我正在创建一个简单的“工具提示”子类,它是一个圆角矩形和一个将“ anchor 定”到另一个 View 的小三角形。

我创建了一个 UILabel 子类,并覆盖了“drawRect”以缩小主标签区域并绘制一个三角形。

'roundRect' 表示应包含全文的圆角矩形部分。

这一切都很好,只是我无法在“roundRect”中显示全文。似乎文本没有出现在最后一行(即三角形现在所在的位置)。

需要注意的另一件事是,我正在使用自动布局并设置了“工具提示标签”的约束以根据需要填充屏幕。这按预期工作,因为减少/添加更多文本会显示适当大小的工具提示。但似乎我需要以某种方式通知“工具提示”或“自动布局”,文本应该适合“工具提示标签”的“roundRect”部分。

屏幕截图 #1 使用此“drawTextInRect”方法,您可以看到正在显示全文,但与“三角形”区域重叠(而且它没有插入,这不是所需的外观):

    override public func drawTextInRect(rect: CGRect) {
super.drawTextInRect(rect)
// super.drawTextInRect(UIEdgeInsetsInsetRect(rect, UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)))
}

屏幕截图 #2 使用带有所需插图的“drawTextInRect”方法(还添加了三角形高度,以便不会用文本写入空间),您可以看到它切断了文本的第二行和第三行,因为它们没有适合'在'roundRect'范围内:
    override public func drawTextInRect(rect: CGRect) {
// super.drawTextInRect(rect)
super.drawTextInRect(UIEdgeInsetsInsetRect(self.roundRect, UIEdgeInsets(top: 10, left: 10, bottom: 10+self.triangleHeight, right: 10)))
}

这是“drawRect”覆盖:
override public func drawRect(rect: CGRect) {
self.roundRect = CGRect(x: rect.minX, y: rect.minY, width: rect.width, height: rect.height-self.triangleHeight)
self.triangleBezier.moveToPoint(CGPoint(x: self.roundRect.midX-self.triangleWidth/2, y: self.roundRect.maxY))
self.triangleBezier.addLineToPoint(CGPoint(x: rect.midX, y: rect.maxY))
self.triangleBezier.addLineToPoint(CGPoint(x: self.roundRect.midX+self.triangleWidth/2, y: self.roundRect.maxY))

self.triangleBezier.closePath()
self.roundRectBezier = UIBezierPath(roundedRect: self.roundRect, cornerRadius: 5.0)
self.roundRectBezier.appendPath(self.triangleBezier)
self.tooltipColor.setFill()
self.roundRectBezier.fill()

super.drawRect(rect)
}

Screenshot #1
Screenshot #2

最佳答案

我实际上不会为此将 UILabel 子类化,而是制作自己的工具提示类,由外部 View 和具有自动布局约束的内部标签组成。内部标签决定了 View 的整个高度。

像这样带有适当圆角/三角形的东西:
enter image description here

或者,如果要分配填充,请改用 UITextView:Adding space/padding to a UILabel

关于autolayout - UILabel 子类 - 自定义 'drawRect' 方法导致文本被截断/不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36108557/

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