อะไรคือ“ ข้อ จำกัด ในการทำกำไร” ใน Storyboard ใน Xcode 6


249

ฉันกำลังทำงานกับการชำระอัตโนมัติและข้อ จำกัด และพบว่ามีConstrain to marginsตัวเลือกใน Xcode 6 ซึ่งไม่ปรากฏใน Xcode 5 และมีการตรวจสอบตามค่าเริ่มต้น

ฉันสร้างโครงการทดสอบจากนั้นฉันเพิ่มUITableViewViewController บนเฟรมที่ตั้งค่าเป็นขนาดเดียวกับมุมมองและข้อ จำกัด ที่เพิ่ม

Xcode 6 คุณสามารถดูที่นี่ได้แม้ว่า tableview จะมีเฟรมเดียวกับ view Xcode แนะนำให้เพิ่ม -16 เป็นข้อ จำกัด ในขณะที่ Xcode 5 แนะนำให้เพิ่มการเว้นวรรค 0

ด้วยข้อ จำกัด ในการตรวจสอบระยะขอบ

ตอนนี้เมื่อคุณยกเลิกการเลือกตัวเลือก "จำกัด ถึงระยะขอบ" จะทำงานเช่นเดียวกับ Xcode 5 และขอแนะนำให้เพิ่ม 0 เป็นข้อ จำกัด

ด้วยข้อ จำกัด ในการทำเครื่องหมายที่ขอบไม่ได้ตรวจสอบ

นอกจากนี้ฉันพบว่าเมื่อฉันเพิ่มข้อ จำกัด กับ Constrain เพื่อตรวจสอบระยะขอบฉันไม่สามารถเปิดไฟล์สตอรีบอร์ดใน Xcode 5 ได้อีกต่อไปดังนั้นจึงเป็นสิ่งใหม่ใน Xcode 6

หวังว่าฉันจะสามารถอธิบายคำถามของฉันได้อย่างถูกต้อง ฉันต้องการที่จะเข้าใจว่า "ข้อ จำกัด ในการทำกำไร" จริงทำอะไรและเมื่อใดที่ฉันควรและไม่ควรใช้ ฉันขอโทษถ้ามันเป็นสิ่งที่ง่ายและชัดเจน

แก้ไข

ฉันพบบางสิ่งเกี่ยวกับระยะขอบของเลย์เอาต์ในการสนทนาที่นี่ฉันสงสัยว่ามันเกี่ยวข้องกับสิ่งนี้หรือไม่


15
ไม่จำเป็นต้องขอโทษ - มันไม่ชัดเจนว่าจะทำอะไร
Ben Clayton

4
+1 ไม่ต้องขอโทษฉันอยากถามคำถามนี้ด้วย BTW: เพื่อเปิดสตอรี่บอร์ดใน Xcode5 ดูได้ที่: stackoverflow.com/a/25298909/529243
Olaf

1
นี่เป็นคำอธิบายที่ใกล้เคียงที่สุดที่ฉันพบ: stackoverflow.com/questions/25275901/ …
นาธาเนียล

วิธีการปิดการใช้งานนี้?
orkenstein

2
ใช่นั่นคือความเจ็บปวดที่แท้จริง ฉันไม่สามารถค้นหาวิธีการยกเลิกการเลือกอย่างถาวร
Bhumit Mehta

คำตอบ:


315

ผมไม่เข้าใจว่าทำไมทุกคนจะบ่นว่า " ขอบจะทำให้เกิดความผิดพลาดในสิ่งที่ตรงไปตรงมาก่อนที่จะมี iOS 8. "

การตั้งข้อ จำกัด ของคุณที่สัมพันธ์กับระยะขอบในไฟล์ xib หรือกระดานเรื่องราวจะไม่ทำให้แอปของคุณทำงานผิดพลาดบน iOS7 และจะไม่สร้างความแตกต่าง UI บนอุปกรณ์ iOS7 ของคุณตราบใดที่คุณไม่ได้สัมผัสUIView.layoutMarginsและUIView.preservesSuperviewLayoutMarginsคุณสมบัติในรหัสของคุณ

มาร์จิ้นใน iOS8 คืออะไร

ระยะขอบของเลย์เอาต์แสดงถึงการขยายรอบ ๆภายในของUIViewระบบโครงร่างที่สามารถใช้เมื่อจัดวางการดูย่อย - เพื่อให้แน่ใจว่ามีช่องว่างเหลือระหว่างขอบของมุมมองและมุมมองย่อย ในแง่นี้มันเป็นเหมือนคุณสมบัติการขยายที่เกี่ยวข้องกับบล็อกใน CSS

ป้อนคำอธิบายรูปภาพที่นี่

โดยค่าเริ่มต้นUIViewมีอัตรากำไรขั้นต้นรูปแบบของ 8 จุดในแต่ละด้านและนี้ไม่สามารถเปลี่ยนแปลงได้ในInterface Builder อย่างไรก็ตามโดยการตั้งค่าUIView.layoutMarginsคุณสมบัติในรหัสซึ่งมีเฉพาะใน iOS8 คุณจะสามารถปรับค่าเหล่านี้ได้

คุณสามารถรับ IB เพื่อแสดงระยะขอบด้วยEditor> Canvas> Show Rectangles สี่เหลี่ยมผืนผ้า: ป้อนคำอธิบายรูปภาพที่นี่

ระยะขอบสามารถใช้เพื่อช่วยจัดวางมุมมองและมุมมองย่อยของคุณ ทุกครั้งUIViewจะมีมาร์จิ้นตามค่าเริ่มต้น แต่จะมีผลกับตำแหน่งการดูเมื่อคุณตั้งค่าข้อ จำกัด ที่เกี่ยวข้องกับระยะขอบเท่านั้น

วิธีใช้มาร์จิ้น

วิธีเดียวที่จะใช้ระยะขอบในตัวสร้างอินเทอร์เฟซคือการตรวจสอบตัวเลือกสัมพันธ์กับระยะขอบขณะกำหนดค่าข้อ จำกัด ของคุณ นี่คือวิธีที่คุณกำหนดข้อ จำกัด ของคุณไปที่ใช้ระยะขอบแทนที่จะเป็นขอบเมื่อวางมุมมองของฉัน

ป้อนคำอธิบายรูปภาพที่นี่

ลองมาดูสี่วิธีที่แตกต่างกันในการตั้งค่าข้อ จำกัด ชั้นนำระหว่างมุมมองและมุมมองย่อย สำหรับแต่ละ จำกัด เราตรวจสอบสมาคมครั้งแรกจะเป็น subview ชั้นนำและสองจะเป็นชั้นนำของ SuperView สิ่งที่คุณต้องการใส่ใจอย่างยิ่งคือการตรวจสอบและยกเลิกการเลือกสถานะของตัวเลือกสัมพันธ์กับระยะขอบของแต่ละจุดสิ้นสุดของข้อ จำกัด เนื่องจากจะกำหนดว่าข้อ จำกัด นั้นเชื่อมโยงกับระยะขอบหรือขอบของมุมมองหรือไม่

  1. รายการแรก (ไม่เลือก) รายการที่สอง (ตรวจสอบ): ในกรณีนี้เราขอประกาศว่าขอบซ้ายของมุมมองย่อยควรจัดชิดขอบด้านซ้ายของ superview (ดังที่แสดงในภาพนี้)

ป้อนคำอธิบายรูปภาพที่นี่

  1. รายการแรก (ยกเลิก) รายการที่สอง (ยกเลิก): ทั้งสองโดยใช้ขอบไม่ขอบ ในกรณีนี้เราจะประกาศว่าขอบซ้ายของมุมมองย่อยควรจัดชิดขอบด้านซ้ายของ superview

ป้อนคำอธิบายรูปภาพที่นี่

  1. รายการแรก (ตรวจสอบ) รายการที่สอง (ไม่เลือก): ในกรณีนี้เราขอประกาศว่าขอบซ้ายของมุมมองย่อยควรจัดชิดขอบซ้ายของ superview เลย์เอาต์ชนิดนี้ทำให้มุมมองย่อยซ้อนทับ superview

ป้อนคำอธิบายรูปภาพที่นี่

  1. รายการแรก (ตรวจสอบ) รายการที่สอง (ตรวจสอบ) สิ่งนี้มีผลเช่นเดียวกับกรณีที่ 2 เนื่องจากทั้งมุมมองย่อยและ superview มีระยะขอบเริ่มต้นเท่ากัน เรากำลังประกาศว่าระยะขอบซ้ายของมุมมองย่อยควรจัดชิดขอบด้านซ้ายของ superview

ป้อนคำอธิบายรูปภาพที่นี่

อะไรคือสิ่งที่ดีเกี่ยวกับมาร์จิ้น

คุณสมบัติใหม่นี้ (iOS8) ส่งผลกระทบต่อการพัฒนา UI เท่านั้นหากคุณตัดสินใจใช้ระยะขอบ

ด้วยการใช้ระยะขอบคุณสามารถปรับตำแหน่งของการชมย่อยหลายครั้งที่แชร์ความสัมพันธ์ทั่วไปกับผู้ดูแลร่วมที่แบ่งปันโดยการเปลี่ยนค่าของพร็อพเพอร์ตี้เดียว นี่คือการชนะอย่างชัดเจนในการตั้งค่าข้อ จำกัด ที่เกี่ยวข้องทั้งหมดด้วยค่าคงที่เพราะถ้าคุณต้องการอัปเดตระยะห่างทั้งหมดแทนที่จะเปลี่ยนค่าทีละหนึ่งคุณสามารถปรับเปลี่ยนตำแหน่งที่เกี่ยวข้องทั้งหมดได้พร้อมกันโดยอัปเดตขอบของ superview ด้วยบรรทัดเดียว รหัสเช่นนี้:

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

เพื่อแสดงให้เห็นถึงประโยชน์นี้ในกรณีต่อไปนี้ขอบด้านซ้ายของการดูทั้งหมดจะจัดชิดขอบด้านซ้ายของผู้ดูแล ดังนั้นการเปลี่ยนระยะขอบด้านซ้ายของ superview จะส่งผลกระทบต่อการดูย่อยทั้งหมดในเวลาเดียวกัน

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณสำหรับคำอธิบายโดยละเอียด ฉันกำลังทำเครื่องหมายคำตอบนี้เป็นคำตอบที่ยอมรับได้เนื่องจากนี่อธิบายสิ่งต่าง ๆ ได้ดี
Bhumit Mehta

ขอบคุณ @Bumum หวังว่าคำตอบนี้จะช่วยได้
Scott Zhu

4
"ฉันไม่เข้าใจเลยว่าทำไมคนถึงบ่น" บางทีพฤติกรรมอาจเปลี่ยนไปด้วยหนึ่งในสุดท้าย betas ฉันไม่ได้ตรวจสอบ แต่อย่างน้อยไม่กี่เดือนที่ผ่านมามันทำให้เกิดความผิดพลาดแม้ว่าคุณจะไม่ได้พยายามตั้งค่า layoutMargins ในโค้ด
KPM

เป็นสิ่งที่คุ้มค่าที่จะชี้ให้เห็นว่าเมื่อเพิ่มข้อ จำกัด ใหม่ Xcode รุ่นใหม่จะอนุญาตให้คุณยกเลิกการเลือกกล่องสำหรับ "จำกัด ขอบเขต" ซึ่งตั้งค่าสถานะ "สัมพันธ์กับระยะขอบ" เดียวกัน สิ่งนี้มีประโยชน์เพราะมันช่วยประหยัดการคลิกเพียงไม่กี่! คำตอบที่ดี BTW อธิบายได้ดีมากและภาพก็มีประโยชน์มาก
EricWasTaken

ฉันสังเกตว่ารูปภาพนั้นถูกฝากไว้ที่ดรอปบ็อกซ์ มันจะดีกว่าหรือไม่ที่จะโฮสต์รูปภาพไว้ใน SO?
ทดสอบ

63

ใน iOS 8 ตอนนี้คุณมีตัวเลือกในการกำหนดข้อ จำกัด ของคุณที่สัมพันธ์กับระยะขอบที่กำหนดไว้ล่วงหน้ากับขอบเขตของ superview แทนที่จะเป็นขอบเขตของ superview ใช่มันเกี่ยวข้องกับระยะขอบทั้งหมดที่คุณชี้ไปในเอกสาร ข้อดีอย่างหนึ่งคือคุณสามารถกำหนดระยะขอบของคุณแบบไดนามิกหรือแตกต่างกันสำหรับอุปกรณ์แต่ละประเภทและเค้าโครงจะได้รับการปรับปรุงตามลำดับโดยไม่ต้องปรับเปลี่ยนข้อ จำกัด

ใช้เมื่อไร: เมื่อคุณต้องการใช้ประโยชน์จากความยืดหยุ่นใหม่นี้

จะใช้เมื่อใด: สำหรับแอปใด ๆ ที่กำหนดเป้าหมายให้ทำงานบน iOS 7 หรือต่ำกว่า


21
นี่จะเป็นคุณสมบัติที่ดีถ้าไม่ได้เปิดใช้งานโดยค่าเริ่มต้นและยังทำให้เกิดความผิดพลาดทันทีในสิ่งใด ๆ ก่อน iOS 8
TylerJames

1
ไม่สามารถตกลงเพิ่มเติม
KPM

42

ทรัพย์สินใน UIView layoutMarginsคือ: ดูแอปเปิ้ลเอกสาร โดยทั่วไปถ้าระยะขอบของเลย์เอาต์เป็น 8,8,8,8 (ค่าเริ่มต้น) ข้อ จำกัด ที่มี 0 พื้นที่ว่างนำหน้าไปสู่ขอบตู้คอนเทนเนอร์จะมีตำแหน่ง x เป็น 8 โปรดทราบว่านี่ใช้ได้เฉพาะใน iOS8 หรือใหม่กว่า

สำหรับทุกคนที่ไม่ต้องการให้ข้อ จำกัด ของพวกเขาไปที่ขอบภาชนะ:

CTRL + คลิก + ลากเพื่อแสดงป๊อปอัพการสร้างข้อ จำกัด

หากเมนูแสดงเพื่อสร้างข้อ จำกัด ให้กับระยะขอบโดยค่าเริ่มต้นกดตัวเลือก / alt ค้างไว้เพื่อให้ข้อ จำกัด ที่จะทำกับภาชนะและไม่ได้เป็นขอบภาชนะ

ตอนนี้มันจะแสดงตัวเลือกในการสร้างข้อ จำกัด ที่ไม่ให้ระยะขอบ นี่คือวิธีที่เร็วขึ้นในการใช้งานของฉัน


3
นี่อาจเป็นทางออกที่ดีที่สุดที่ฉันพบ การยกเลิกการเลือก "คงที่ถึงระยะขอบ" ไม่ได้ผลเสมอไปและรู้สึกถึงความมหัศจรรย์น้อยเกินไป มันสมบูรณ์แบบ
Levi McCallum

ทำไมค่าเริ่มต้นในโลกถึงไม่ใช่ 10pt
ZaBlanc

11
Apple มีประวัติของการเลือกความยาวและขนาดตามการวิจัยการใช้งานไม่ใช่โดยการเลือกหมายเลขที่เราอ่านรหัสอาจต้องการ เช่นความสูงเริ่มต้นสำหรับหลาย ๆ สิ่งคือ 44 หรือ 35 pt @ZaBlanc
Kyle Robson

โซลูชั่นที่สมบูรณ์แบบเมื่อฉันเพิ่มข้อ จำกัด บนกระดานเรื่องราวโดยไม่มีระยะขอบ ขอบคุณ!
inix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.