ฉันใช้ Xcode 6 Beta 3, iOS 8 SDK สร้างเป้าหมาย iOS 7.0 โดยใช้ Swift โปรดอ้างอิงปัญหาของฉันทีละขั้นตอนกับภาพหน้าจอด้านล่าง
ฉันมี UICollectionView ใน Storyboard 1 Prototype UICollectionViewCell ซึ่งมี 1 ป้ายกำกับอยู่ตรงกลาง (ไม่มีกฎการเปลี่ยนขนาดอัตโนมัติ) พื้นหลังสีม่วงคือการทำเครื่องหมาย contentView ที่สร้างขึ้นในรันไทม์โดยเซลล์ฉันเดา มุมมองนั้นจะถูกปรับขนาดอย่างเหมาะสมตาม UICollectionViewLayoutDelegate ของฉันในที่สุด แต่ไม่ใช่ใน iOS 7 สังเกตว่าฉันใช้ Xcode 6 และปัญหาเกิดขึ้นกับ iOS 7 เท่านั้น
เมื่อฉันสร้างแอพใน iOS 8 ทุกอย่างโอเค
หมายเหตุ: สีม่วงคือcontentView , Blue คือ UIButton ของฉันที่มีมุมมน
อย่างไรก็ตามใน iOS 7 การดูย่อยทั้งหมดภายในเซลล์จู่ ๆ เฟรมของ (0,0,50,50) และไม่สอดคล้องกับกฎ Autoresizing ของฉันอีกต่อไป
ฉันคิดว่านี่เป็นข้อผิดพลาดใน iOS 8 SDK หรือ Swift หรือ Xcode
อัปเดต 1:ปัญหานี้ยังคงมีอยู่ใน Xcode 6.0.1 อย่างเป็นทางการ! การทำงานที่ดีที่สุดคือสิ่งที่ KoCMoHaBTa แนะนำไว้ด้านล่างโดยตั้งค่าเฟรมใน cellForItem ของเซลล์ (คุณต้องซับคลาสเซลล์ของคุณด้วย) มันกลับกลายเป็นว่านี่เป็นความไม่ลงรอยกันระหว่าง iOS 8 SDK และ iOS 7 (ตรวจสอบคำตอบของ ecotax ด้านล่างที่ยกมาจาก Apple)
อัปเดต 2: วางรหัสนี้ไว้ที่จุดเริ่มต้นของcellForItemของคุณและสิ่งต่าง ๆ ควรจะโอเค:
/** Xcode 6 on iOS 7 hot fix **/
cell.contentView.frame = cell.bounds;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
/** End of Xcode 6 on iOS 7 hot fix **/
contentView
ให้ปรับขนาดด้วยเซลล์ทำงานได้ดีเพื่อแก้ไขปัญหา ฉันเดาว่าใน iOS 8 Apple ได้เปลี่ยนแปลงบางอย่างเกี่ยวกับวิธีจัดการเนื้อหามุมมองของเซลล์เมื่อสร้างใน Interface Builder (ซึ่งยังคงเป็นกล่องดำอยู่เล็กน้อย) แต่ความจริงที่ว่ามันเปลี่ยนพฤติกรรมเมื่อกำหนดเป้าหมาย iOS 7 ย่อมเป็นข้อบกพร่อง
contentView
ขอบกับขอบเซลล์