พื้นที่ปลอดภัยเป็นคู่มือการจัดวาง ( ปลอดภัยพื้นที่คู่มือการจัด )
คู่มือการจัดวางที่แสดงถึงส่วนของมุมมองของคุณที่ไม่มีการตรวจสอบโดยบาร์และเนื้อหาอื่น ๆ ใน iOS 11+ Apple กำลังคัดค้านคู่มือการจัดวางด้านบนและล่างและแทนที่ด้วยคู่มือการจัดวางพื้นที่ปลอดภัย
เมื่อมุมมองปรากฏบนหน้าจอคู่มือนี้จะแสดงส่วนของมุมมองที่ไม่ครอบคลุมเนื้อหาอื่น ๆ พื้นที่ปลอดภัยของมุมมองสะท้อนพื้นที่ที่ครอบคลุมโดยแถบนำทางแถบแท็บแถบเครื่องมือและบรรพบุรุษอื่น ๆ ที่บดบังมุมมองของตัวควบคุมมุมมอง (ใน tvOS พื้นที่ปลอดภัยรวมกรอบหน้าจอตามที่กำหนดโดยoverscanCompensationInsets
คุณสมบัติของ UIScreen) นอกจากนี้ยังครอบคลุมพื้นที่เพิ่มเติมใด ๆ ที่กำหนดโดยadditionalSafeAreaInsets
คุณสมบัติของตัวควบคุมมุมมอง หากไม่ได้ติดตั้งมุมมองในลำดับชั้นมุมมองหรือยังไม่ปรากฏบนหน้าจอคู่มือเลย์เอาต์จะตรงกับขอบของมุมมองเสมอ
สำหรับมุมมองรูทของตัวควบคุมมุมมองพื้นที่ปลอดภัยในคุณสมบัตินี้แสดงถึงส่วนทั้งหมดของเนื้อหาของตัวควบคุมมุมมองที่ถูกบดบังและสิ่งเพิ่มเติมที่คุณระบุ สำหรับมุมมองอื่นในลำดับชั้นมุมมองพื้นที่ปลอดภัยจะแสดงเฉพาะส่วนของมุมมองนั้นที่ถูกบดบัง ตัวอย่างเช่นถ้ามุมมองทั้งหมดอยู่ในพื้นที่ปลอดภัยของมุมมองรูทของมุมมองรูทของคอนโทรลเลอร์มุมมองขอบที่แทรกในคุณสมบัตินี้คือ 0
ตามที่ Apple ระบุว่าXcode 9 - Release
Builder Interface Builder นั้นใช้ UIView.safeAreaLayoutGuide แทนคำแนะนำรูปแบบบนและล่างใน UIViewController หากต้องการใช้พื้นที่ปลอดภัยใหม่ให้เลือกเส้นบอกแนวพื้นที่ปลอดภัยในตัวตรวจสอบไฟล์สำหรับตัวควบคุมมุมมองจากนั้นเพิ่มข้อ จำกัด ระหว่างเนื้อหาของคุณกับจุดยึดพื้นที่ปลอดภัยใหม่ สิ่งนี้จะป้องกันเนื้อหาของคุณไม่ให้ถูกบดบังด้วยแถบด้านบนและด้านล่าง ข้อ จำกัด ในพื้นที่ปลอดภัยจะถูกแปลงเป็นด้านบนและล่างเมื่อปรับใช้กับ iOS เวอร์ชันก่อนหน้า
นี่คือการอ้างอิงอย่างง่ายเป็นการเปรียบเทียบ (เพื่อสร้างเอฟเฟ็กต์ภาพที่คล้ายกัน) ระหว่างคำแนะนำเค้าโครง (บนและล่าง) ที่มีอยู่และคำแนะนำเค้าโครงพื้นที่ปลอดภัย
เค้าโครงพื้นที่ปลอดภัย:
autolayout
วิธีการทำงานกับเค้าโครงพื้นที่ปลอดภัยหรือไม่
ทำตามขั้นตอนเหล่านี้เพื่อค้นหาวิธีแก้ไข:
- เปิดใช้งาน 'เค้าโครงพื้นที่ปลอดภัย' หากไม่ได้เปิดใช้งาน
- ลบ 'ข้อ จำกัด ทั้งหมด' หากพวกเขาแสดงการเชื่อมต่อกับSuper viewและแนบทั้งหมดอีกครั้งด้วยจุดยึดเค้าโครงที่ปลอดภัย หรือดับเบิลคลิกที่ข้อ จำกัด และแก้ไขการเชื่อมต่อจากมุมมองสุดไปที่จุดยึด SafeArea
นี่คือตัวอย่างภาพรวมวิธีเปิดใช้งานเค้าโครงพื้นที่ปลอดภัยและแก้ไขข้อ จำกัด
นี่คือผลลัพธ์ของการเปลี่ยนแปลงข้างต้น
การออกแบบเลย์เอาต์ด้วย SafeArea
เมื่อออกแบบสำหรับ iPhone X คุณต้องแน่ใจว่าเลย์เอาต์เต็มหน้าจอและไม่ถูกบดบังด้วยมุมโค้งมนของอุปกรณ์ตัวเรือนเซ็นเซอร์หรือตัวบ่งชี้สำหรับการเข้าถึงหน้าจอโฮม
แอพส่วนใหญ่ที่ใช้องค์ประกอบ UI มาตรฐานที่ได้รับจากระบบเช่นแถบนำทางตารางและคอลเล็กชันจะปรับเข้ากับฟอร์มแฟคเตอร์ใหม่ของอุปกรณ์โดยอัตโนมัติ วัสดุพื้นหลังขยายไปถึงขอบของจอแสดงผลและองค์ประกอบ UI ถูกแทรกและจัดตำแหน่งอย่างเหมาะสม
สำหรับแอพที่มีเลย์เอาต์ที่กำหนดเองการรองรับ iPhone X ก็ค่อนข้างง่ายเช่นกันโดยเฉพาะหากแอปของคุณใช้เลย์เอาต์อัตโนมัติและปฏิบัติตามแนวทางที่ปลอดภัยและขอบเลย์เอาต์
นี่คือตัวอย่างรหัส (อ้างอิงจาก: คู่มือการวางเลย์เอาต์ที่ปลอดภัย ) :
หากคุณสร้างข้อ จำกัด ในโค้ดให้ใช้คุณสมบัติ safeAreaLayoutGuide ของ UIView เพื่อรับแองเคอร์เค้าโครงที่เกี่ยวข้อง ลองสร้างตัวอย่างเครื่องมือสร้างส่วนติดต่อขึ้นใหม่อีกครั้งในรหัสเพื่อดูว่ามีลักษณะอย่างไร:
สมมติว่าเรามีมุมมองสีเขียวเป็นคุณสมบัติในตัวควบคุมมุมมองของเรา:
private let greenView = UIView()
เราอาจมีฟังก์ชั่นในการตั้งค่ามุมมองและข้อ จำกัด ที่เรียกจาก viewDidLoad:
private func setupView() {
greenView.translatesAutoresizingMaskIntoConstraints = false
greenView.backgroundColor = .green
view.addSubview(greenView)
}
สร้างข้อ จำกัด ระยะขอบชั้นนำและต่อท้ายเช่นเดียวกับการใช้ layoutMarginsGuide ของมุมมองรูท:
let margins = view.layoutMarginsGuide
NSLayoutConstraint.activate([
greenView.leadingAnchor.constraint(equalTo: margins.leadingAnchor),
greenView.trailingAnchor.constraint(equalTo: margins.trailingAnchor)
])
ตอนนี้นอกจากว่าคุณจะกำหนดเป้าหมายไปที่ iOS 11 เท่านั้นคุณจะต้องตัดข้อ จำกัด ของคำแนะนำเลย์เอาต์พื้นที่ปลอดภัยด้วย #available และถอยกลับไปที่คำแนะนำเลย์เอาต์ด้านบนและด้านล่างสำหรับ 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)
])
}
ผลลัพธ์:
การUIView
ขยายส่วนต่อไปนี้ทำให้การทำงานกับ SafeAreaLayout เป็นเรื่องง่าย
extension UIView {
// Top Anchor
var safeAreaTopAnchor: NSLayoutYAxisAnchor {
if #available(iOS 11.0, *) {
return self.safeAreaLayoutGuide.topAnchor
} else {
return self.topAnchor
}
}
// Bottom Anchor
var safeAreaBottomAnchor: NSLayoutYAxisAnchor {
if #available(iOS 11.0, *) {
return self.safeAreaLayoutGuide.bottomAnchor
} else {
return self.bottomAnchor
}
}
// Left Anchor
var safeAreaLeftAnchor: NSLayoutXAxisAnchor {
if #available(iOS 11.0, *) {
return self.safeAreaLayoutGuide.leftAnchor
} else {
return self.leftAnchor
}
}
// Right Anchor
var safeAreaRightAnchor: NSLayoutXAxisAnchor {
if #available(iOS 11.0, *) {
return self.safeAreaLayoutGuide.rightAnchor
} else {
return self.rightAnchor
}
}
}
นี่คือตัวอย่างรหัสในObjective-C :
นี่คือเอกสารประกอบอย่างเป็นทางการของ Apple Developer สำหรับคำแนะนำในการจัดวางพื้นที่ปลอดภัย
Safe Area จำเป็นสำหรับการจัดการการออกแบบส่วนต่อประสานกับผู้ใช้สำหรับ iPhone-X นี่คือคำแนะนำพื้นฐานสำหรับวิธีการออกแบบส่วนต่อประสานผู้ใช้สำหรับ iPhone-X โดยใช้เค้าโครงพื้นที่ปลอดภัย