มีอีกกรณีหนึ่งข้อความแสดงข้อผิดพลาดนี้อาจปรากฏขึ้น ฉันค้นหาอยู่หลายชั่วโมงจนพบปัญหา กระทู้นี้มีประโยชน์มากหลังจากอ่านไปสองสามครั้ง
หากตัวควบคุมมุมมองหลักของคุณหมุนเป็นแนวนอนและคุณเรียกใช้ตัวควบคุมมุมมองย่อยแบบกำหนดเองซึ่งควรแสดงในแนวตั้งข้อความแสดงข้อผิดพลาดนี้อาจเกิดขึ้นได้เมื่อโค้ดของคุณมีลักษณะดังนี้:
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationPortrait;
}
กับดักที่นี่คือ Intellisense ของ xcode ที่แนะนำ "UIInterfaceOrientationPortrait" และฉันไม่สนใจมัน ในแวบแรกดูเหมือนว่าจะถูกต้อง
ชื่อหน้ากากที่เหมาะสม
UIInterfaceOrientationMaskPortrait
โปรดระวัง"Mask" ที่มีขนาดเล็กมิฉะนั้นมุมมองย่อยของคุณจะจบลงด้วยข้อยกเว้นและข้อความแสดงข้อผิดพลาดดังกล่าวข้างต้น
enums ใหม่มีการเปลี่ยนแปลงเล็กน้อย enums เก่าส่งคืนค่าที่ไม่ถูกต้อง!
(ใน UIApplication.h คุณสามารถดูการประกาศใหม่: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )
วิธีแก้ปัญหาคือ:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
// ATTENTION! Only return orientation MASK values
// return UIInterfaceOrientationPortrait;
return UIInterfaceOrientationMaskPortrait;
}
ในการใช้งานที่รวดเร็ว
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> Int {
return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}