我有一个自定义的tableview单元格当前,我有一个UILabel正在填充多行长的文本。但是,我不想改变自定义单元格的大小,所以我希望UILabel能够适应给定的大小。这是我的问题:
首次加载表时,UILabel将无法反映正确的高度,并且不会显示前3个或4个单元格的自动换行
一旦我开始滚动,新单元格会反映正确的高度,向后滚动会使旧单元格反映出正确的高度。
如果我来回滚动,标签会缩小它们的宽度并变得压扁。
我也在使用自动布局。以下是格式化标签的代码:
private func assignBusAndRouteTextForIndex(card: ETACard, index: Int) {
card.busNumberLabel.text = jsonValueForIndexAndSubscript(index, string: "rd")
var route = jsonValueForIndexAndSubscript(index, string: "fd")
route = route.stringByReplacingOccurrencesOfString("&", withString: "&")
print(route)
card.routeLabel.text = route
card.routeLabel.adjustsFontSizeToFitWidth = true
card.routeLabel.sizeToFit()
}
private func jsonValueForIndexAndSubscript(index: Int, string: String) -> String {
return self.items.arrayValue[index][string].description;
}
最后,我的自定义tableview单元类看起来像这样:
import Foundation
import UIKit
//Dependancies
import AnimationsFramework
class ETACard: UITableViewCell {
@IBOutlet weak var card: UIView!
@IBOutlet weak var busNumberLabel: UILabel! // Contains 'Bus:'
@IBOutlet weak var routeLabel: UILabel! // Contains 'Via:'
@IBOutlet weak var circleView: UIView! // Contains the timing circle
@IBOutlet weak var timeLabel: UILabel! // Contains the arrival time
override func layoutSubviews() {
cardSetup()
self.addSubview(card)
}
func cardSetup() {
self.card.alpha = 1
self.card.layer.masksToBounds = false
self.card.layer.cornerRadius = 1
self.card.layer.shadowOffset = CGSizeMake(-0.2, 0.2)
self.card.layer.shadowRadius = 1
let path = UIBezierPath(rect: self.card.bounds)
self.card.layer.shadowPath = path.CGPath
self.card.layer.shadowOpacity = 0.2
}
func renderCircleForBusTime(busTime: Int) {
ShapeRenderer.renderCircleForBusTime(circleView, busTime: busTime)
}
func removeCircleFromCard(view: UIView) {
ShapeRenderer.removeRenderedCircle(view);
}
}
编辑:
以下是我所谈论的一些渐进式截图。每个屏幕截图之间是滚动到列表底部,然后备份。
请注意文字如何逐渐缩小并开始削减。
答案 0 :(得分:0)
经过多次搜索后,我在主题上找到了这个主题: UILabel sizeToFit doesn't work with autolayout ios6
事实证明,使用AutoLayout,sizeToFit
不是一个选项。所以我查看了自动布局设置,看到我的底部设置为equal 30px
,应该是less than or equal to 30px
,以便可以展开文本框下方的空间。只要您的边有约束或者您有宽度约束,并且您将高度<=
设置为某种尺寸,自动布局就应该处理它。