Ios Swift UILabel未设置正确的y值
我已经确认,指定给addLabel函数的值正在更改,但在打印label.frame.origin.y时,它总是显示0。目前,代码看起来很糟糕,因为我已经为这个问题挣扎了一段时间。有什么想法吗Ios Swift UILabel未设置正确的y值,ios,swift,uilabel,Ios,Swift,Uilabel,我已经确认,指定给addLabel函数的值正在更改,但在打印label.frame.origin.y时,它总是显示0。目前,代码看起来很糟糕,因为我已经为这个问题挣扎了一段时间。有什么想法吗 var newY: Int = 8 var mainViewNewHeight: Int = 251 func setContentFromList(content: [String], target: UIView, targetHeight: NSLayoutConstrain
var newY: Int = 8
var mainViewNewHeight: Int = 251
func setContentFromList(content: [String], target: UIView, targetHeight: NSLayoutConstraint) {
newY = 8
var bullet:UILabel!
let width = Int(UIScreen.main.bounds.width) - 84
let font = UIFont(name: "Helvetica", size: 18)
for item in content {
bullet = UILabel(frame: CGRect(x: 8, y: newY, width: 7, height: 17))
bullet.text = "•"
bullet.textColor = UIColor( red: 183/255, green: 110/255, blue:121/255, alpha: 1.0 )
bullet.font = bullet.font.withSize(18)
let a = CGFloat(newY)
print(a) // Correct
addLabel(y: a, text: item, font: font!, width: CGFloat(width), target: target)
target.addSubview(bullet)
}
mainViewNewHeight += newY
targetHeight.constant = CGFloat(newY)
}
这是addLabel函数:
func addLabel(y: CGFloat, text:String, font:UIFont, width:CGFloat, target: UIView) {
let label:UILabel = UILabel(frame: CGRect(x: 22, y: y, width: width, height: CGFloat.greatestFiniteMagnitude))
print("Label y:", label.frame.origin.y) // Invalid (0.0)
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.font = font
label.text = text
label.sizeToFit()
newY += Int(label.frame.height)
target.addSubview(label)
}
您的问题在于高度:CGFloat.greatestfinitemagnity删除CGFloat.greatestfinitemagnity并将其替换为整数值,您将看到您的代码可以正常工作
所以基本上:
let label:UILabel = UILabel(frame: CGRect(x: 22, y: y, width: width, height: 20))
打印:
20.0
Label y: 20.0
41.0
Label y: 41.0
62.0
Label y: 62.0
83.0
Label y: 83.0
这很明显,但是当前的标签彼此堆叠。我需要它们在彼此下面。不要将sizeToFit与自动布局一起使用。。。