เริ่มต้นใน iOS7 ตัวควบคุมมุมมองใช้เค้าโครงแบบเต็มหน้าจอตามค่าเริ่มต้น ในเวลาเดียวกันคุณสามารถควบคุมวิธีการแสดงมุมมองและทำกับคุณสมบัติเหล่านั้นได้มากขึ้น:
edgesForExtendedLayout
โดยพื้นฐานแล้วด้วยคุณสมบัตินี้คุณสามารถกำหนดให้มุมมองด้านใดของคุณสามารถขยายให้ครอบคลุมทั้งหน้าจอได้ ลองนึกภาพว่าคุณดันUIViewController
เข้าไปUINavigationController
เป็นเมื่อวางมุมมองของตัวควบคุมมุมมองนั้นมันจะเริ่มต้นที่แถบนำทางสิ้นสุดลง แต่คุณสมบัตินี้จะตั้งค่าที่ด้านข้างของมุมมอง (ด้านบนซ้ายด้านล่างขวา) สามารถขยายให้เต็มหน้าจอได้
ลองดูด้วยตัวอย่าง:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
ที่นี่คุณไม่ได้ตั้งค่าเป็นedgesForExtendedLayout
ดังนั้นจึงมีการใช้ค่าเริ่มต้น ( UIRectEdgeAll
) ดังนั้นมุมมองจะขยายเค้าโครงเพื่อเติมเต็มหน้าจอทั้งหมด
นี่คือผลลัพธ์ที่ได้:
อย่างที่คุณเห็นพื้นหลังสีแดงจะขยายด้านหลังของแถบนำทางและแถบสถานะ
ตอนนี้คุณกำลังจะตั้งค่าUIRectEdgeNone
ดังกล่าวเป็นดังนั้นคุณจึงบอกให้คอนโทรลเลอร์มุมมองไม่ขยายมุมมองให้ครอบคลุมหน้าจอ:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
และผลลัพธ์:
automaticallyAdjustsScrollViewInsets
คุณสมบัตินี้จะใช้เมื่อมุมมองของคุณเป็นหรือคล้ายกันเช่นUIScrollView
UITableView
คุณต้องการให้ตารางของคุณเริ่มต้นที่แถบนำทางสิ้นสุดลงเพราะคุณจะไม่เห็นเนื้อหาทั้งหมดหากไม่ได้ แต่ในเวลาเดียวกันคุณต้องการให้ตารางของคุณครอบคลุมทั้งหน้าจอเมื่อเลื่อน ในกรณีดังกล่าวการตั้งค่าedgesForExtendedLayout
เป็นไม่มีจะไม่ทำงานเนื่องจากตารางของคุณจะเริ่มเลื่อนตำแหน่งที่แถบนำทางสิ้นสุดลงและจะไม่ไปทางด้านหลัง
นี่คือที่ที่คุณสมบัตินี้มีประโยชน์ถ้าคุณให้ตัวควบคุมมุมมองปรับ insets โดยอัตโนมัติ (ตั้งค่าคุณสมบัตินี้เป็น YES ด้วยค่าเริ่มต้น) มันจะเพิ่มส่วนแทรกเข้าไปที่ด้านบนของตารางดังนั้นตารางจะเริ่มต้นที่การนำทาง แถบสิ้นสุด แต่การเลื่อนจะครอบคลุมทั้งหน้าจอ
นี่คือเมื่อตั้งค่าเป็นไม่:
และใช่ (โดยค่าเริ่มต้น):
ในทั้งสองกรณีตารางจะเลื่อนด้านหลังแถบนำทาง แต่ในกรณีที่สอง (YES) ตารางจะเริ่มจากด้านล่างแถบนำทาง
extendedLayoutIncludesOpaqueBars
ค่านี้เป็นส่วนเพิ่มเติมจากค่าก่อนหน้า โดยดีฟอลต์พารามิเตอร์นี้ถูกตั้งค่าเป็น NO หากแถบสถานะทึบแสงมุมมองจะไม่ถูกขยายเพื่อรวมแถบสถานะแม้ว่าคุณจะขยายมุมมองของคุณเพื่อให้ครอบคลุม ( edgesForExtendedLayout
ถึงUIRectEdgeAll
)
หากคุณตั้งค่าเป็น YES สิ่งนี้จะทำให้มุมมองไปอยู่ใต้แถบสถานะอีกครั้ง
หากบางสิ่งไม่ชัดเจนเขียนความคิดเห็นและฉันจะตอบ
iOS รู้ได้อย่างไรว่า UIScrollView ใช้อะไร
iOS คว้ามุมมองย่อยแรกในมุมมองของคุณ ViewController อันที่ดัชนี 0 และถ้ามันเป็นประเภทย่อยของUIScrollView
แล้วใช้คุณสมบัติอธิบายกับมัน
แน่นอนนี่หมายความว่าใช้UITableViewController
งานได้ตามค่าเริ่มต้น (เนื่องจากUITableView
เป็นมุมมองแรก)