我不知道这里发生了什么 - 遵循减少UILable线高的所有其他答案,我有一系列标签,其文字是动态的,可以随时更改,因为它们是文字拉来自服务器。
因为行高似乎总是与标签的实际文本相关联,所以由于某些无限循环,我可能会遇到应用程序冻结。我不知道该怎么做。
以下是我尝试更改行高的方法,其中txtSources[id]
不断更新:
override init (frame : CGRect) {
super.init(frame : frame)
}
func customInit()
{
// if(bgView.frame == CGRect.zero)
// {
// bgView = UIView(frame: self.frame)
// bgView.backgroundColor = self.backgroundColor
// bgView.center = CGPoint(x: self.bounds.width/2, y: self.bounds.height/2)
// self.addSubview(bgView)
// self.sendSubview(toBack: bgView)
// }
self.font = iphoneFont
if txtSources[id] != ""
{
str = (txtSources[id]?.capitalizingFirstLetter())!
let paragraphStyle = NSMutableParagraphStyle()
//line height size
paragraphStyle.lineSpacing = 0.1
let attrString = NSMutableAttributedString(string: str)
attrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
self.attributedText = attrString
//self.text = str
}
if(Network.reachability?.isReachable == false && self.text == "")
{
noWifiAlternative()
}
self.numberOfLines = 0
self.backgroundColor = UIColor.clear
self.textColor = barColorStr
self.clipsToBounds = false
//self.sizeToFit()
thinLabel.frame = CGRect(x: 0, y: 0, width: self.bounds.width, height: self.bounds.height)
thinLabel.textColor = barColorStr
thinLabel.textAlignment = .left
thinLabel.numberOfLines = 0
thinLabel.font = iphoneFontThin
thinLabel.center = CGPoint(x: self.bounds.width/2, y: self.bounds.height * 0.89)
self.addSubview(thinLabel)
thinLabel.text = "bkadasjdjasb"
}
func noWifiAlternative()
{
self.text = txtSourcesNoWifi[id]!
}
required public init(coder aDecoder: NSCoder) {
fatalError("This class does not support NSCoding")
}
convenience init () {
self.init(frame:CGRect.zero)
}
override public func layoutSubviews() {
customInit()
}
然而,这不会导致无限循环:
if txtSources[id] != ""
{
str = (txtSources[id]?.capitalizingFirstLetter())!
self.text = str
}
并将布尔标志设置为仅设置行高一次无效,因为在初始化后的几秒钟内,标签的文本=""
如何降低线高?
答案 0 :(得分:1)
请参阅我的回答第3段:UIButton: when isHighlighted = true, I can only call a function by swiping my finger
您误解了使用layoutSubviews
的位置/方式。
只有在自动调整和时,才应覆盖此方法 子视图的基于约束的行为不提供行为 你要。您可以使用实现来设置框架矩形 您的子视图直接。
除了子视图框架矩形设置外,其他任何代码都不属于layoutSubviews
。
一次性初始化的通常位置为viewDidLoad()
UIViewControllers
,加载NIB awakeFromNib()
为UIViews
,加载非NIB为init()
UIView
秒。视图操作代码的通常位置是自定义私有方法,例如检查数据的updateUI()
,例如一个String,并相应地更新一些视图。
答案 1 :(得分:1)
您的代码无限重新布局,因为:
customInit
来电self.addSubview(thinLabel)
,会调用调用layoutIfNeeded
的{{1}}调用layoutSubViews
,因此循环会重复。
customInit
中你应该做的唯一事情是layoutSubviews
(IE:布局子视图的帧)。