[iOS-UIKit] UIScrollView Autolayout

當(dāng)通過IB對UIScrollView使用Autolayout時(shí),與正常情況有一些不同,需要特別注意。

首先對于UIScrollView本身的位置和大小的約束與對其他組件的設(shè)置相同。

之后對于UIScrollView的內(nèi)容的約束需特殊處理,因?yàn)閁IScrollView通過contentSize屬性來決定其內(nèi)容即可滑動(dòng)部分的大小,所以與普通UIView布局子view的不同之處在于,對于 UIScrollView的子view來說,它的leading/trailing/top/bottom space是相對于 UIScrollView的contentSize而不是bounds來確定的,所以當(dāng)你嘗試用UIScrollView和它 子view的 eading/trailing/top/bottom 來互相決定大小的時(shí)候,就會出現(xiàn)「Has ambiguous scrollable content width/height」的warning。子view的寬高不能通過Leading, Trailing, Top, Bottom來確定,邊距的作用是于子view的寬高一起來確定contentSize。可以先在UIScrollView中嵌入一個(gè)普通UIView如contentView作為真正的子view的container,方便管理,也可直接嵌入真正的子view,原理都是一樣的。就是contentView的寬或高不能通過依賴UIScrollView來實(shí)現(xiàn),根據(jù)情況,可以設(shè)置固定的寬度或高度的約束,或者依賴其他組件為參照物確定寬高,比如superView,另外,對于某些控件,例如 UILabel,UIImageView,它們的尺寸是可以通過其內(nèi)容決定的。最終的contentSize是contentView的寬高和邊距的和。

如上兩幅圖所示當(dāng)向UIScrollView添加一個(gè)子view并設(shè)置Leading, Trailing, Top, Bottom約束時(shí),系統(tǒng)并不能確定其contentSize,會提示Has ambiguous scrollable content height/width,而如果換成UIView的話此時(shí)的約束已經(jīng)是完整的。當(dāng)向子view添加了寬高的約束時(shí)UIScrollView才能確定contentSize,顯示約束完整。而如果此時(shí)換做UIView會提示對于子view的寬高有約束沖突。

官方Technical Note中的提到的Pure Auto Layout Approach就是這個(gè)意思,Mixed Approach還要再研究下。

P.S:如果UIImageView的圖片是運(yùn)行時(shí)從服務(wù)器獲取,空得UIImageView無法確定大小,我們可以通過修改Intrinsic Size為 Placeholder來用一個(gè)臨時(shí)的占位尺寸來告訴storyboard,在你這里就按照這個(gè)尺寸走。這個(gè)占位尺寸僅在storyboard設(shè)計(jì)階段有效,不會影響到運(yùn)行時(shí)的尺寸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容