我对此感到困惑。我有一个非常简单的设置。我有一个UIScrollView,它被限制为具有0,0,0,0的ViewController的超级视图。然后将UILabel限制为带有8,8,8,8的UIScrollView。
我有一个String扩展名,以获取具有特定字体的标签的高度。
extension String {
func heightWithConstrainedWidth(width: CGFloat, font: UIFont) -> CGFloat {
let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
let boundingBox = self.boundingRect(with: constraintRect, options: [.usesLineFragmentOrigin, .usesFontLeading], attributes: [NSAttributedString.Key.font: font], context: nil)
return boundingBox.height
}
}
在viewDidLoad中,我设置了标签。 (UILabel的行数设置为0,并自动换行)。
let text = "some really long text" // actually really long text in my sample
let width = view.frame.width
let font: UIFont! = UIFont(name: "HelveticaNeue-UltraLight", size: 42)
let height = text.heightWithConstrainedWidth(width: width, font: font)
print("height first: \(height)") // 1080
然后我将scrollView.contentSize设置为该大小
scrollView.contentSize = CGSize(width: view.frame.width, height)
print("new height: \(scrollView.contentSize.height)") // 1080
但是在scrollViewDidScroll中,如果我打印出那里的高度
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("scrollView.contentSize.height: \(scrollView.contentSize.height)") // 3440
}
我想知道为什么在scrollViewDidScroll中,scrollView的contentSize的高度是3440,而不是1080。在我输入标签文本并设置内容大小后,它的高度是1080。
我想如果大小为3440,我会看到在设置了scrollView的contentSize之后,它不会在scrollViewDidScroll委托方法中更改。这是因为我使用的是“自动版式”,而“自动版式”在开始滚动或其他操作之前不会计算contentSize的大小吗?