คำตอบคือ[view layoutIfNeeded]
.
นี่คือเหตุผล:
คุณยังคงได้รับความกว้างและความสูงในปัจจุบันของมุมมองโดยการตรวจสอบview.bounds.size.width
และview.bounds.size.height
(หรือเฟรมซึ่งเทียบเท่าเว้นแต่คุณจะเล่นด้วยview.transform
)
หากสิ่งที่คุณต้องการคือความกว้างและความสูงโดยนัยโดยข้อ จำกัด ที่มีอยู่ของคุณคำตอบคือไม่ต้องตรวจสอบข้อ จำกัด ด้วยตนเองเนื่องจากจะทำให้คุณต้องนำตรรกะการแก้ข้อ จำกัด ทั้งหมดของระบบโครงร่างอัตโนมัติมาใช้ใหม่เพื่อตีความสิ่งเหล่านั้น ข้อ จำกัด แต่สิ่งที่คุณควรทำมีเพียงขอให้เค้าโครงอัตโนมัติอัปเดตเค้าโครงนั้นเพื่อที่จะแก้ไขข้อ จำกัด และอัปเดตค่าของ view.bounds ด้วยโซลูชันที่ถูกต้องจากนั้นคุณจะตรวจสอบ view.bounds
คุณขอให้เค้าโครงอัตโนมัติอัปเดตเค้าโครงได้อย่างไร โทร[view setNeedsLayout]
ถ้าคุณต้องการให้เค้าโครงอัตโนมัติอัปเดตเค้าโครงในรอบถัดไปของการวนรอบการทำงาน
แต่ถ้าคุณต้องการที่จะปรับปรุงรูปแบบทันทีดังนั้นทันทีที่คุณสามารถเข้าถึงขอบเขตใหม่ให้คุณค่าต่อมาภายในฟังก์ชั่นปัจจุบันของคุณหรือที่จุดอื่นก่อนหันของวงวิ่งแล้วคุณจะต้องเรียกและ[view setNeedsLayout]
[view layoutIfNeeded]
คุณถามคำถามที่สอง: "ฉันจะเปลี่ยนข้อ จำกัด ด้านความสูง / ความกว้างได้อย่างไรหากฉันไม่มีข้อมูลอ้างอิงโดยตรง"
หากคุณสร้างข้อ จำกัด ใน IB ทางออกที่ดีที่สุดคือสร้าง IBOutlet ในตัวควบคุมมุมมองหรือมุมมองของคุณเพื่อให้คุณมีการอ้างอิงโดยตรง หากคุณสร้างข้อ จำกัด ในโค้ดคุณควรยึดการอ้างอิงในคุณสมบัติที่อ่อนแอภายในในเวลาที่คุณสร้างขึ้น หากมีคนอื่นสร้างข้อ จำกัด คุณจะต้องค้นหาโดยการตรวจสอบคุณสมบัติ view.constraints บนมุมมองและอาจเป็นลำดับชั้นของมุมมองทั้งหมดและใช้ตรรกะที่พบ NSLayoutConstraint ที่สำคัญ นี่อาจเป็นวิธีที่ไม่ถูกต้องเนื่องจากยังกำหนดให้คุณต้องพิจารณาว่าข้อ จำกัด ใดกำหนดขนาดขอบเขตได้อย่างมีประสิทธิภาพเมื่อไม่มีการรับประกันว่าจะเป็นคำตอบง่ายๆสำหรับคำถามนั้น ค่าขอบเขตสุดท้ายอาจเป็นทางออกของระบบที่ซับซ้อนมากของข้อ จำกัด หลายประการ