亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS ScrollView實現自動布局的方法(適用Swift 3.0 )

2020-07-26 02:34:16
字體:
來源:轉載
供稿:網友

前言

眾所周知我們大家在開發中,可能會有一些頁面顯示的元素很多,可能會超出一個屏幕,但也不適合用 TableView 或者 CollectionView,此時我們一般會用 ScrollView,那么就會出現自動布局的問題。下面話不多說了,來一起看看詳細的介紹吧。

實現方式

純代碼

  • 特點編碼繁瑣:需要手寫控件
  • 安全:只要正確地設置約束或者 frame、contentSize,一般不會出現滾動問題

示例

lazy var scrollView: UIScrollView = { let obj = UIScrollView(frame: CGRect(x: 0, y: 0, width: .screenW, height: self.screenH)) return obj}()override func viewDidLoad() { super.viewDidLoad() view.addSubview(scrollView) let subViewH: CGFloat = 400 let topView = UIView(frame: CGRect(x: 0, y: 0, width: enW, height: subViewH)) topView.backgroundColor = UIColor.red scrollView.addSubview(topView) let bottomView = UIView(frame: CGRect(x: 0, y: subViewH, h: screenW, height: subViewH)) bottomView.backgroundColor = UIColor.purple scrollView.addSubview(bottomView) scrollView.contentSize = CGSize(width: screenW, height: iewH * 2)}

效果圖

scrollview_純代碼實現.gif

Storyboard + 內部View

特點

  • 搭建界面簡單
  • 直觀
  • 需要占位視圖

頁面結構如圖

Scrollview_SB_InnerView.png

可能出現的問題

  • ScrollView 中直接添加子元素,報錯:Has ambiguous scrollable content height
  • ScrollView 內容超出屏幕仍不能滾動

Scrollview_layout_error.png

實現滾動的代碼

override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() let statusBarH: CGFloat = 20 // 如果沒有導航欄,就返回狀態欄的高度 let navH = gationController?.navigationBar.frame.maxY ?? statusBarH let deltaH = (screenH - navH) - bottomView.frame.maxY placeholderViewBottomConstraint.constant = deltaH}

效果圖

Scrollview_SB+InnerView.gif

Storyboard + 外部View

特點

  • 搭建界面簡單
  • 直觀
  • 不需要占位視圖,不需要對 ScrollView 的布局做特殊處理
  • 需要處理外部視圖的 frame(如果沒有用戶交互,可以忽略)

頁面結構如圖

Scrollview_SB+OutterView.png

可能出現的問題

  • ScrollView 中直接添加子元素,報錯:Has ambiguous scrollable content height
  • 當內容超出屏幕高度時,必須得設置 ContainerView 的 frame,否則不能滾動或者超出屏幕部分不接受事件

Scrollview_SB+OutterView_事件問題.png

實現滾動的代碼

override func viewDidLoad() { super.viewDidLoad() scrollView.addSubview(containerView)}override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() var f = containerView.frame f.size.width = screenW // 這句代碼很重要,處理超出屏幕無法響應事件問題 f.size.height = bottomView.frame.maxY containerView.frame = f scrollView.contentSize = CGSize(width: screenW, height: omView.frame.maxY)}

效果圖

Scrollview_SB+OutterView.gif

總結

ScrollView 不能滾動的原因

  • contentSize 小于自身 frame 的尺寸
  • isScrollEnabled 屬性,不過它默認就是 true,默認無需設置
  • ScrollView 或者其父元素無法交互,此時我們需要檢查 isUserInteractionEnabled 屬性是否為 true

ScrollView 一直支持滾動

默認情況下,當 ScrollView 里的元素不足一個屏幕高度時,不能滾動,如需滾動(彈簧效果),需要設置 alwaysBounceVertical 屬性為 true(水平方向亦如此)

關于 ScrollView 布局的選擇

純代碼布局

如果是純代碼布局,只能用方式一。老老實實、一行一行代碼實現布局,雖然代碼繁雜,但是坑少。(現在仍有不少公司是這樣編程的)

界面布局

推薦方式三,這樣 ScrollView 和 其子元素分離,可以簡化很多約束問題,更直觀

以上代碼,適用于 Swift 3.0 語法。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩国产欧美区| 欧美做受高潮电影o| 97免费中文视频在线观看| 色婷婷成人综合| 91精品久久久久久久久久久久久久| 欧美激情欧美狂野欧美精品| 久久久久久久影视| 久久黄色av网站| 欧美日韩在线视频首页| 日韩美女在线观看一区| 欧美国产日本高清在线| 久久久91精品| 日韩精品免费电影| 上原亚衣av一区二区三区| 亚洲国产精久久久久久久| 欧美精品做受xxx性少妇| 91高清视频免费观看| 欧美日韩精品在线| 欧美成人三级视频网站| 欧美在线一区二区视频| 亚洲福利视频二区| 日韩av网址在线| 久久精品国产99国产精品澳门| 亚洲国产成人爱av在线播放| 亚洲成人免费网站| 欧美激情在线狂野欧美精品| 91亚洲va在线va天堂va国| 久久久中精品2020中文| 九九热精品视频国产| 日韩欧美在线播放| 国内精品模特av私拍在线观看| 国产精品网站入口| 欧美孕妇孕交黑巨大网站| 国产精品在线看| 日韩欧美中文字幕在线播放| 韩日精品中文字幕| 宅男66日本亚洲欧美视频| 668精品在线视频| 欧美激情一级精品国产| 久久精品视频免费播放| 一区二区中文字幕| 国产精品video| 久久久久成人网| 亚洲乱码一区av黑人高潮| 国产精品第七十二页| 欧美激情在线有限公司| 亚洲乱码av中文一区二区| 最新国产精品拍自在线播放| 欧美精品videofree1080p| 欧美成人精品在线视频| 国产精品亚洲精品| 久久精品成人动漫| xvideos成人免费中文版| 日本老师69xxx| 国产精品一区二区三区久久| 国产欧美日韩视频| 欧美理论电影网| 91国偷自产一区二区三区的观看方式| 日韩电影中文字幕在线观看| 欧美日韩国产成人| 欧美一级片在线播放| 日韩电影中文字幕在线| 久久琪琪电影院| 日韩中文在线中文网在线观看| 91麻豆国产精品| 中文字幕亚洲欧美一区二区三区| 久久久久久久一区二区| 亚洲色图综合网| 欧美精品电影免费在线观看| 成人黄色免费在线观看| 国产一区二区三区视频| 亚洲jizzjizz日本少妇| 91理论片午午论夜理片久久| 欧美综合在线观看| 国产精品老牛影院在线观看| 久久99视频精品| 一个人看的www欧美| 国产成人aa精品一区在线播放| 成人h视频在线观看播放| 日韩视频免费看| 中文字幕av一区二区| 色999日韩欧美国产| 亚洲人成网站免费播放| 亚洲国产一区二区三区四区| 亚洲成人av资源网| 欧美性xxxx极品hd满灌| 亚洲日本成人女熟在线观看| 欧美第一黄网免费网站| 日韩hd视频在线观看| 亚洲欧美一区二区三区情侣bbw| 国产精品久久久久久av| 久久视频在线免费观看| 久久韩剧网电视剧| 欧美限制级电影在线观看| 国产精品日韩欧美综合| 欧美激情一级欧美精品| 亚洲欧美制服丝袜| 欧美二区在线播放| 欧美激情亚洲激情| 日韩在线高清视频| 韩国三级电影久久久久久| 一个色综合导航| 欧美激情中文字幕在线| 国内偷自视频区视频综合| 成人女保姆的销魂服务| 成人a在线视频| 91久久综合亚洲鲁鲁五月天| 中文字幕亚洲一区二区三区| 亚洲专区中文字幕| 精品国偷自产在线视频| 久久91精品国产91久久跳| 亚洲精品第一国产综合精品| 欧美俄罗斯乱妇| 97av在线视频| 91精品国产91久久久久| 精品久久久久国产| 成人中文字幕在线观看| 国产视频久久久| 亚洲欧美日韩精品久久| 久久欧美在线电影| 岛国av一区二区| 日韩av在线电影网| 成人精品在线视频| 久久免费精品日本久久中文字幕| 国产精品亚洲自拍| 日本精品在线视频| 亚洲男人7777| 国产精品 欧美在线| 国产91色在线播放| 成人中文字幕在线观看| 91精品视频在线看| 91精品国产91久久久久久吃药| 狠狠综合久久av一区二区小说| 国产成人在线亚洲欧美| 国产成人亚洲综合91| 中文字幕在线视频日韩| 中文字幕亚洲天堂| 日韩在线高清视频| 欧美性猛交丰臀xxxxx网站| 91欧美精品午夜性色福利在线| 亚洲18私人小影院| 91国在线精品国内播放| 久久久久亚洲精品国产| 久久久久久久久久久国产| 亚洲激情在线观看视频免费| 欧美人交a欧美精品| 国产精品久久激情| 大荫蒂欧美视频另类xxxx| 久久91亚洲精品中文字幕奶水| 精品国产乱码久久久久久虫虫漫画| 欧美自拍大量在线观看| 亚洲一区中文字幕| 92裸体在线视频网站| 欧美日韩免费在线| 日韩av免费网站| 日韩在线资源网| 成人精品视频在线| 成人在线激情视频| 成人免费看吃奶视频网站| 日韩欧美精品中文字幕| 78m国产成人精品视频| 亚洲精品免费av| 亚洲大胆人体av| 欧美人交a欧美精品|