了解UIScrollView contentSize.height

时间:2019-04-07 21:16:24

标签: ios uiscrollview

我对此感到困惑。我有一个非常简单的设置。我有一个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的大小吗?

0 个答案:

没有答案