gpt4 book ai didi

ios - 在 Swift 中以编程方式在 UILabel 内自由定位文本

转载 作者:行者123 更新时间:2023-11-30 10:57:21 25 4
gpt4 key购买 nike

我创建了 UILabel 的子类来更改 UILabels 内文本的对齐/位置,但文本始终顶部对齐。我读了很多主题,但没有找到和我有同样问题的人。

当我调用super.drawText(in: r)时,我的子类的drawText函数中的y原点看起来被忽略了。我这么说是因为我发送到 super.drawText() 的矩形的 origin.x、size.width 和 size.height 按预期工作

result I currently get with the code below 的屏幕截图

what I want的屏幕截图

这是我的 UILabel 子类:

class Label : UILabel {

enum VerticalAlignment {
case top
case middle
case bottom
}

enum HorizontalAlignment {
case left
case center
case right
}

var verticalAlignment: VerticalAlignment = .middle {
didSet { setNeedsDisplay() }
}

var horizontalAlignment: HorizontalAlignment = .center {
didSet { setNeedsDisplay() }
}

override public func textRect(forBounds bounds: CGRect, limitedToNumberOfLines: Int) -> CGRect {
var rect: CGRect = super.textRect(forBounds: bounds, limitedToNumberOfLines: limitedToNumberOfLines)

rect = CGRect(x: bounds.origin.x, y: bounds.origin.y, width: rect.size.width, height: rect.size.height)

switch verticalAlignment {
case .top:
break
case .middle:
rect.origin.y += ((bounds.size.height - rect.size.height) / 2.0)
case .bottom:
rect.origin.y += (bounds.size.height - rect.size.height)
}
switch horizontalAlignment {
case .left:
break
case .center:
rect.origin.x += ((bounds.size.width - rect.size.width) / 2.0)
case .right:
rect.origin.x += (bounds.size.width - rect.size.width)
}
return rect
}

override func drawText(in rect: CGRect) {
let r = self.textRect(forBounds: rect, limitedToNumberOfLines: self.numberOfLines)
super.drawText(in: r)
}

}

我如何创建我的标签:

func addtestLabel() {
var label: Label = Label()

label.text = "NICE LABEL!"
label.textColor = hexToUIColor(hex: "#ffffff")
label.frame = CGRect(x: 35, y: self.view.bounds.size.height - 120, width: self.view.bounds.size.width - 70, height: 75)
label.backgroundColor = hexToUIColor(hex: "#000000")
label.font = UIFont(name: "Savu-Condensed", size: label.frame.size.height / 2.0)
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 1

self.view.addSubview(label)
}

最佳答案

你的代码除了一行之外都很好。创建标签时您无法设置

label.lineBreakMode = .byWordWrapping

label.numberOfLines = 1

我不知道为什么它会中断,但是当只有一行时换行是不合逻辑的,所以也许有些东西不会触发。

您可以将行数设为 0 或大于 1 的数字。另一个选择是删除 .byWordWrapping。这些事情中的任何一个都会给你带来你所期望的结果。

关于ios - 在 Swift 中以编程方式在 UILabel 内自由定位文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53803583/

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