ตอนนี้ตัวสร้างอินเทอร์เฟซช่วยให้ผู้ใช้เปลี่ยนขนาดของตัวควบคุมมุมมองทุกตัวในสตอรี่บอร์ดแบบไดนามิกเพื่อจำลองขนาดของอุปกรณ์บางอย่าง
ก่อนฟังก์ชันนี้ผู้ใช้ควรตั้งค่าขนาดตัวควบคุมมุมมองแต่ละรายการด้วยตนเอง ดังนั้นตัวควบคุมมุมมองจึงได้รับการบันทึกด้วยขนาดที่แน่นอนซึ่งใช้ในinitWithCoder
การตั้งค่าเฟรมเริ่มต้น
ตอนนี้ดูเหมือนว่าinitWithCoder
จะไม่ใช้ขนาดที่กำหนดไว้ในสตอรีบอร์ดและกำหนดขนาด 1000x1000 px สำหรับมุมมองตัวควบคุมมุมมองและมุมมองย่อยทั้งหมด
นี่ไม่ใช่ปัญหาเนื่องจากมุมมองควรใช้โซลูชันโครงร่างอย่างใดอย่างหนึ่งต่อไปนี้:
การจัดวางอัตโนมัติและข้อ จำกัด ทั้งหมดจะจัดวางมุมมองของคุณอย่างถูกต้อง
autoresizingMask ซึ่งจะจัดวางแต่ละมุมมองที่ไม่มีข้อ จำกัด ใด ๆ ที่แนบมา ( หมายเหตุการจัดวางอัตโนมัติและข้อ จำกัด ระยะขอบเข้ากันได้ในมุมมองเดียวกัน \ o /! )
แต่นี้เป็นปัญหาสำหรับสิ่งที่รูปแบบทั้งหมดที่เกี่ยวข้องกับมุมมองชั้นเหมือนcornerRadius
ตั้งแต่ค่าautolayoutมิได้autoresizing หน้ากากนำไปใช้กับคุณสมบัติชั้น
ในการตอบปัญหานี้วิธีทั่วไปคือใช้viewDidLayoutSubviews
หากคุณอยู่ในคอนโทรลเลอร์หรือlayoutSubview
หากคุณอยู่ในมุมมอง ณ จุดนี้ (อย่าลืมเรียกsuper
วิธีสัมพัทธ์) คุณค่อนข้างมั่นใจว่าเค้าโครงทั้งหมดได้ทำเสร็จแล้ว!
ค่อนข้างแน่ใจ? ไม่ทั้งหมดฉันตั้งข้อสังเกตและนั่นคือเหตุผลที่ฉันถามคำถามนี้ในบางกรณีมุมมองยังคงมีขนาด 1000x1000 ในวิธีนี้ ฉันคิดว่าไม่มีคำตอบสำหรับคำถามของตัวเอง เพื่อให้ข้อมูลสูงสุดเกี่ยวกับเรื่องนี้:
1- เกิดขึ้นเฉพาะเมื่อวางเซลล์เท่านั้น! ในUITableViewCell
& UICollectionViewCell
คลาสย่อยlayoutSubview
จะไม่ถูกเรียกหลังจากมุมมองย่อยจะได้รับการจัดวางอย่างถูกต้อง
2- ตามที่ @EugenDimboiu กล่าวไว้ (โปรดเพิ่มคะแนนคำตอบของเขาหากมีประโยชน์สำหรับคุณ) การเรียก[myView layoutIfNeeded]
ใช้มุมมองย่อยที่ไม่ได้จัดวางจะจัดวางได้อย่างถูกต้องทันเวลา
- (void)layoutSubviews {
[super layoutSubviews];
NSLog (self.myLabel);
[self.myLabel layoutIfNeeded];
NSLog (self.myLabel);
}
3- ตามความเห็นของฉันนี่เป็นข้อบกพร่องอย่างแน่นอน ฉันส่งไปที่เรดาร์แล้ว (id 28562874)
PS: ฉันไม่ใช่เจ้าของภาษาอังกฤษดังนั้นอย่าลังเลที่จะแก้ไขโพสต์ของฉันหากไวยากรณ์ของฉันควรได้รับการแก้ไข;)
PS2: หากคุณมีทางออกที่ดีกว่าอย่าลังเลที่จะเขียนคำตอบอื่น ฉันจะย้ายคำตอบที่ยอมรับ