แม้ว่าคำถามจะระบุโดยทางโปรแกรมเมื่อพบปัญหาเดียวกันและชอบที่จะทำงานใน Interface Builder ฉันคิดว่าอาจเป็นประโยชน์ในการเพิ่มคำตอบที่มีอยู่ด้วยโซลูชันตัวสร้างอินเตอร์เฟส
sizeToFit
สิ่งแรกคือจะลืม เค้าโครงอัตโนมัติจะจัดการสิ่งนี้ในนามของคุณตามขนาดเนื้อหาที่แท้จริง
ดังนั้นปัญหาคือจะติดฉลากให้พอดีกับเนื้อหาด้วย Auto Layout ได้อย่างไร โดยเฉพาะ - เพราะคำถามกล่าวถึง - ความสูง โปรดทราบว่าใช้หลักการเดียวกันกับความกว้าง
ดังนั้นเรามาเริ่มด้วยตัวอย่าง UILabel ที่ตั้งค่าความสูงเป็น 41px สูง:
อย่างที่คุณเห็นในการคว้าหน้าจอด้านบน"This is my text"
มีช่องว่างด้านบนและด้านล่าง นั่นคือช่องว่างระหว่างความสูงของ UILabel และเนื้อหาเนื้อหา
หากเรารันแอพในเครื่องจำลองแน่นอนเราจะเห็นสิ่งเดียวกัน:
ตอนนี้ให้เลือก UILabel ในเครื่องมือสร้างส่วนต่อประสานและดูการตั้งค่าเริ่มต้นในเครื่องมือตรวจสอบขนาด:
สังเกตข้อ จำกัด ที่ไฮไลต์ไว้ด้านบน นั่นคือความสำคัญกอดเนื้อหา ดังที่ Erica Sadun อธิบายไว้ในการจัดวางเลย์เอาต์อัตโนมัติ iOS ที่ยอดเยี่ยมนี่คือ:
วิธีที่ผู้ชมชอบที่จะหลีกเลี่ยงช่องว่างภายในเพิ่มเติมเป็นเนื้อหาหลัก
สำหรับเราด้วย UILabel เนื้อหาหลักคือข้อความ
ที่นี่เรามาถึงหัวใจของสถานการณ์พื้นฐานนี้ เราได้กำหนดข้อ จำกัด สองประการสำหรับป้ายข้อความ พวกเขาขัดแย้งกัน หนึ่งกล่าวว่า"ความสูงต้องเท่ากับ 41 พิกเซลสูง" อื่น ๆ กล่าวว่า"กอดมุมมองไปที่เนื้อหาของมันดังนั้นเราจึงไม่ได้มีการขยายเพิ่มเติมใด ๆ" ในกรณีของเรากอดมุมมองเป็นข้อความดังนั้นเราจึงไม่มีช่องว่างภายในเพิ่มเติม
ขณะนี้ด้วยเค้าโครงอัตโนมัติด้วยคำแนะนำที่ต่างกันสองคำที่บอกว่าทำสิ่งต่าง ๆ รันไทม์ต้องเลือกอย่างใดอย่างหนึ่ง มันทำทั้งสองอย่างไม่ได้ UILabel ไม่สามารถมีความสูงทั้ง 41 พิกเซลและไม่มีช่องว่างภายใน
วิธีนี้ได้รับการแก้ไขคือการระบุลำดับความสำคัญ คำสั่งหนึ่งจะต้องมีลำดับความสำคัญสูงกว่าอีกคำสั่งหนึ่ง หากทั้งสองคำสั่งพูดต่างกันและมีลำดับความสำคัญเท่ากันข้อยกเว้นจะเกิดขึ้น
งั้นลองไปกันดู ข้อ จำกัด ความสูงของฉันมีความสำคัญของ1000ซึ่งเป็นที่ต้องการ ความสูงกอดเนื้อหาเป็น250ซึ่งเป็นที่อ่อนแอ จะเกิดอะไรขึ้นถ้าเราลดลำดับความสำคัญสูง จำกัด ไป249 ?
ตอนนี้เราสามารถเห็นความมหัศจรรย์ที่จะเกิดขึ้น มาลองซิมกันดู:
! น่ากลัว รับเนื้อหาได้สำเร็จ เพียงเพราะความสูงมีความสำคัญ249น้อยกว่าเนื้อหากอดความสำคัญ250 โดยทั่วไปฉันพูด"ความสูงฉันระบุที่นี่มีความสำคัญน้อยกว่าสิ่งที่ฉันได้ระบุไว้สำหรับเนื้อหากอด" ดังนั้นการกอดเนื้อหาจะชนะ
บรรทัดล่างการได้รับฉลากเพื่อให้พอดีกับข้อความนั้นทำได้ง่ายเพียงแค่ระบุความสูงหรือความกว้าง - ข้อ จำกัด และการตั้งค่าที่ถูกต้องที่มีลำดับความสำคัญนั้นสอดคล้องกับข้อ จำกัด ลำดับความสำคัญของเนื้อหาของแกนนั้น
จะทำให้ความกว้างเท่ากับการออกกำลังกายสำหรับผู้อ่าน!
label.sizeToFit()
ใน Xcode / viewController ข้อ จำกัด ก็เพียงพอแล้ว ไม่ได้สร้างป้ายในสนามเด็กเล่น จนถึงวิธีเดียวที่ฉันพบว่าการทำงานในสนามเด็กเล่นคือการทำlabel.sizeToFit()