Xcode 9 beta的Safe Area,xcode9 xib新變化

?Xcode 9 beta的安全區(qū)

安全區(qū)是布局指南(安全區(qū)布局指南)。布局指南表示視圖中由酒吧和其他內(nèi)容遮擋的部分。在iOS 11中,蘋果公司正在棄用頂部和底部布局指南,并使用單個安全區(qū)域布局指南替換它們。當(dāng)視圖在屏幕上可見時,本指南反映視圖中未被其他內(nèi)容覆蓋的部分。視圖的安全區(qū)域反映了導(dǎo)航欄,標(biāo)簽欄,工具欄和掩蓋視圖控制器視圖的其他祖先覆蓋的區(qū)域。(在tvOS中,安全區(qū)域包含屏幕的屏幕,由overscanCompensationInsetsUIScreen?的屬性定義)。它還涵蓋視圖控制器additionalSafeAreaInsets屬性定義的任何其他空間。如果視圖當(dāng)前未安裝在視圖層次結(jié)構(gòu)中,或者屏幕上尚未顯示,則布局指南始終與視圖的邊緣匹配。對于視圖控制器的根視圖,此屬性中的安全區(qū)域表示視圖控制器內(nèi)容被遮蔽的整個部分,以及您指定的任何其他插入。對于視圖層次結(jié)構(gòu)中的其他視圖,安全區(qū)域僅反映該視圖中被遮蔽的部分。例如,如果視圖完全位于其視圖控制器根視圖的安全區(qū)域內(nèi),則此屬性中的邊緣插入為0。



根據(jù)Apple,Xcode 9 - 發(fā)行說明

Interface Builder使用UIView.safeAreaLayoutGuide作為UIViewController中不推薦的Top和Bottom布局指南的替代品。要使用新的安全區(qū)域,請在視圖控制器的文件檢查器中選擇安全區(qū)域布局指南,然后在內(nèi)容和新的安全區(qū)域錨點之間添加約束。這可以防止您的內(nèi)容被頂部和底部欄以及tvOS上的過掃描區(qū)域所掩蓋。部署到早期版本的iOS時,安全區(qū)域的約束將轉(zhuǎn)換為頂部和底部。



以下是示例代碼: 如果您在代碼中創(chuàng)建約束,請使用UIView的safeAreaLayoutGuide屬性來獲取相關(guān)的布局錨點。讓我們在代碼中重新創(chuàng)建上面的Interface Builder示例,看看它的外觀:

假設(shè)我們在視圖控制器中有綠色視圖作為屬性:

private let greenView = UIView()

我們可能有一個功能來設(shè)置從viewDidLoad調(diào)用的視圖和約束:

private func setupView() {

greenView.translatesAutoresizingMaskIntoConstraints = false

greenView.backgroundColor = .green

view.addSubview(greenView)

}

始終使用根視圖的layoutMarginsGuide創(chuàng)建前導(dǎo)和尾隨邊距約束:

let margins = view.layoutMarginsGuide

NSLayoutConstraint.activate([

greenView.leadingAnchor.constraint(equalTo: margins.leadingAnchor),

greenView.trailingAnchor.constraint(equalTo: margins.trailingAnchor)

])

現(xiàn)在,除非您僅定位到iOS 11,否則您需要將#available的安全區(qū)域布局指南約束包裝起來,并回到早期iOS版本的頂部和底部布局指南:

if #available(iOS 11, *) {

let guide = view.safeAreaLayoutGuide

NSLayoutConstraint.activate([

greenView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0),

guide.bottomAnchor.constraintEqualToSystemSpacingBelow(greenView.bottomAnchor, multiplier: 1.0)

])

} else {

let standardSpacing: CGFloat = 8.0

NSLayoutConstraint.activate([

greenView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: standardSpacing),

bottomLayoutGuide.topAnchor.constraint(equalTo: greenView.bottomAnchor, constant: standardSpacing)

])

}

蘋果官網(wǎng)文檔:https://developer.apple.com/documentation/uikit/uiview/2891102-safearealayoutguide

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

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

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