我使用StackOverflow的popular thread设置了我的UILabel填充,以解决自动布局问题。 该线程基本上是UILabel扩展。
部分答案是:
.container{
width: 98%;
border: 2px solid #f00;
padding: 10px;
}
.left {
width: 47%;
float: left;
margin: 0 1% 0 1%;
border: 1px solid green;
}
.right {
width: 47%;
float: left;
margin: 0 1% 0 1%;
border: 1px solid green;
}
.inner-text{
text-align:center;
}
.image{
padding: 20px;
}
.image img{
max-width: 100%;
}
一切正常,填充已添加,但我需要重新加载tableViewcell才能看到效果。
我已经覆盖了我的customCell的 viewWillLayoutSubviews()这样的功能,用于填充
class NRLabel : UILabel {
var textInsets = UIEdgeInsets.zero {
didSet { invalidateIntrinsicContentSize() }
}
override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
let insetRect = UIEdgeInsetsInsetRect(bounds, 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 UIEdgeInsetsInsetRect(textRect, invertedInsets)
}
override func drawText(in rect: CGRect) {
super.drawText(in: UIEdgeInsetsInsetRect(rect, textInsets))
}
}
效果是这样的。
你看,第一个标签在重新加载单元格后正在填充它。
请建议如何使用上述扩展程序来实现UILabel填充,以便解决此问题。
答案 0 :(得分:0)
添加 这两个函数进入你的扩展并删除所有其他:
rest
答案 1 :(得分:0)
使用您的NRLabel
课程,这对我来说很好。在Storyboard TableViewCell Prototype中添加了theLabel
,并将约束设置为允许自动调整行大小。
class PaddedLabelCell : UITableViewCell {
@IBOutlet weak var theLabel: NRLabel!
override func awakeFromNib() {
super.awakeFromNib()
self.setupLabel()
}
func setupLabel() -> Void {
theLabel.layer.cornerRadius = 8.0
theLabel.layer.masksToBounds = true
theLabel.textInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
// any other setup stuff can go here....
}
}
答案 2 :(得分:0)
NRLabel中没有任何内容告诉它在textInsets属性更改时重绘。你需要做这样的事情:
var textInsets = UIEdgeInsets.zero {
didSet {
invalidateIntrinsicContentSize()
setNeedsDisplay()
}
}
现在,当textInsets属性发生变化时,将使用新的文本插图重新绘制NRLabel。
答案 3 :(得分:-1)
经过一段漫长的疲惫时光,我才找到了我从未尝试过的解决方案,我不知道为什么。 :(
在 cellForRowAtIndexPath 中,我刚刚编写了customCell文件中的行。
在返回单元格之前调用此行。
cell.chatLabel.textInsets = UIEdgeInsets.init(top: 10, left: 10, bottom: 10, right: 10)
背后的原因可能是,Cell被绘制了所有的功能,但它没有太多的刷新它的UI。 因此,在显示单元格之前调用该行可以解决问题。