在IOS的界面開發中,佈局方式存在分裂的兩種局面。 早入行的iOS開發者,基本上都是手動計算各種高度。但是從web或者Android轉過去的學習iOS的開發者,基本上都很難適應這種手動計算的方式,更加偏向使用autolayout去做佈局。 實際上 iPhone6之後,iOS設備出現多種解析度之後,蘋 ...
在IOS的界面開發中,佈局方式存在分裂的兩種局面。
早入行的iOS開發者,基本上都是手動計算各種高度。但是從web或者Android轉過去的學習iOS的開發者,基本上都很難適應這種手動計算的方式,更加偏向使用autolayout去做佈局。
實際上 iPhone6之後,iOS設備出現多種解析度之後,蘋果也推薦大家使用autolayout去寫界面。
看了幾本iOS的書籍,基本的都是直接設置一個固定的contentSize給UIScrollView就完事了,也不考慮高度不固定的情況。
網上搜索了一堆,也沒看到一個正常一點的例子。
切入主題
思路:創建一個UIScrollView,然後直接把子View的下邊的約束依賴到UIScollView的底部,
然後就ok了
上代碼
// 1
var scrollView : UIScrollView = {
let v = UIScrollView(frame: .zero)
v.backgroundColor = UIColor.systemGray
return v;
}();
// 2.
self.view.addSubview(scrollView)
// 3.設置UIScrollView的預設寬高約束
scrollView.snp.makeConstraints { make in
make.leading.equalTo(view.safeAreaLayoutGuide.snp.leading)
make.top.equalTo(view.safeAreaLayoutGuide.snp.top)
make.trailing.equalTo(view.safeAreaLayoutGuide.snp.trailing)
make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
}
// 4. 創建子View
let v = UIView();
v.backgroundColor = UIColor.systemCyan
scrollView.addSubview(v)
v.snp.makeConstraints { make in
make.width.equalTo(200)
make.height.equalTo(3000)
make.leading.equalToSuperview()
make.top.equalToSuperview()
make.bottom.equalTo(scrollView.snp.bottom) // 重點就是這一句。讓子View的bottom依賴到UIScrollView的bottom。就可以直接滾動了
}
參考
https://stackoverflow.com/questions/48216808/programmatic-uiscrollview-with-autolayout