ระดับการปรับขนาดสำหรับ iPad แนวตั้งและโหมดแนวนอน


98

โดยพื้นฐานแล้วฉันต้องการให้มุมมองย่อยของฉันอยู่ในตำแหน่งที่แตกต่างกันโดยขึ้นอยู่กับการวางแนวของ iPad (แนวตั้งหรือแนวนอน) โดยใช้คลาสการปรับขนาดที่แนะนำใน xcode 6 ฉันได้พบบทช่วยสอนมากมายที่อธิบายว่ามีคลาสการปรับขนาดที่แตกต่างกันสำหรับ Iphones ในแนวตั้งและแนวนอนบน IB อย่างไร แต่อย่างไรก็ตามดูเหมือนว่าจะไม่มีโหมดแนวนอนหรือแนวตั้งสำหรับ iPad บน IB เลย ใครสามารถช่วย?


ดูเหมือนว่าจะไม่มีโซลูชันที่ไม่ใช่โปรแกรมซึ่งจำเป็นสำหรับหน้าจอเริ่มต้น
SwiftArchitect

คำตอบ:


174

ดูเหมือนว่า Apple มีเจตนาที่จะปฏิบัติต่อการวางแนว iPad ทั้งสองแบบเหมือนกัน - แต่ในขณะที่พวกเราหลายคนพบว่ามีเหตุผลในการออกแบบที่ถูกต้องมากที่ต้องการเปลี่ยนเค้าโครง UI สำหรับ iPad Portrait กับ iPad Landscape

น่าเสียดายที่ระบบปฏิบัติการปัจจุบันไม่ได้ให้การสนับสนุนสำหรับความแตกต่างนี้ ... หมายความว่าเรากลับมาจัดการข้อ จำกัด การจัดวางอัตโนมัติในโค้ดหรือวิธีแก้ปัญหาที่คล้ายกันเพื่อให้บรรลุสิ่งที่เราควรจะได้รับฟรีโดยใช้ Adaptive UI .

ไม่ใช่วิธีการแก้ปัญหาที่สวยงาม

ไม่มีวิธีใดที่จะใช้ประโยชน์จากเวทมนตร์ที่ Apple สร้างไว้แล้วใน IB และ UIKit เพื่อใช้คลาสขนาดที่เราเลือกสำหรับการวางแนวที่กำหนด?

~

ในการคิดถึงปัญหาโดยทั่วไปมากขึ้นฉันตระหนักว่า 'คลาสขนาด' เป็นเพียงวิธีการจัดการเลย์เอาต์หลาย ๆ แบบที่เก็บไว้ใน IB เพื่อให้สามารถเรียกใช้งานได้ตามต้องการในรันไทม์

ในความเป็นจริง 'class size' เป็นเพียงค่า enum คู่หนึ่ง จาก UIInterface.h:

typedef NS_ENUM(NSInteger, UIUserInterfaceSizeClass) {
    UIUserInterfaceSizeClassUnspecified = 0,
    UIUserInterfaceSizeClassCompact     = 1,
    UIUserInterfaceSizeClassRegular     = 2,
} NS_ENUM_AVAILABLE_IOS(8_0);

ดังนั้นไม่ว่า Apple จะตัดสินใจตั้งชื่อรูปแบบต่างๆเหล่านี้อย่างไรโดยพื้นฐานแล้วพวกมันเป็นเพียงคู่ของจำนวนเต็มที่ใช้เป็นตัวระบุประเภทเฉพาะเพื่อแยกความแตกต่างของเลย์เอาต์หนึ่งจากอีกรูปแบบหนึ่งที่เก็บไว้ใน IB

ตอนนี้สมมติว่าเราสร้างเลย์เอาต์อื่น (โดยใช้คลาสขนาดที่ไม่ได้ใช้) ใน IB - พูดว่าสำหรับ iPad Portrait ... มีวิธีให้อุปกรณ์ใช้คลาสขนาดที่เราเลือก (เค้าโครง UI) ตามความจำเป็นในรันไทม์หรือไม่ เหรอ?

หลังจากลองใช้วิธีต่างๆ (สวยงามน้อยกว่า) ในการแก้ปัญหาแล้วฉันสงสัยว่าอาจมีวิธีแทนที่คลาสขนาดเริ่มต้นโดยทางโปรแกรม และมี (ใน UIViewController.h):

// Call to modify the trait collection for child view controllers.
- (void)setOverrideTraitCollection:(UITraitCollection *)collection forChildViewController:(UIViewController *)childViewController NS_AVAILABLE_IOS(8_0);
- (UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController NS_AVAILABLE_IOS(8_0);

ดังนั้นหากคุณสามารถรวมลำดับชั้นของตัวควบคุมมุมมองของคุณเป็นตัวควบคุมมุมมอง 'ลูก' และเพิ่มลงในตัวควบคุมมุมมองผู้ปกครองระดับบนสุด ... คุณสามารถแทนที่เด็กตามเงื่อนไขโดยคิดว่าเป็นคลาสขนาดที่แตกต่างจากค่าเริ่มต้น จากระบบปฏิบัติการ

นี่คือตัวอย่างการใช้งานที่ทำสิ่งนี้ในตัวควบคุมมุมมอง "หลัก":

@interface RDTraitCollectionOverrideViewController : UIViewController {
    BOOL _willTransitionToPortrait;
    UITraitCollection *_traitCollection_CompactRegular;
    UITraitCollection *_traitCollection_AnyAny;
}
@end

@implementation RDTraitCollectionOverrideViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setUpReferenceSizeClasses];
}

- (void)setUpReferenceSizeClasses {
    UITraitCollection *traitCollection_hCompact = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
    UITraitCollection *traitCollection_vRegular = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular];
    _traitCollection_CompactRegular = [UITraitCollection traitCollectionWithTraitsFromCollections:@[traitCollection_hCompact, traitCollection_vRegular]];

    UITraitCollection *traitCollection_hAny = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassUnspecified];
    UITraitCollection *traitCollection_vAny = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassUnspecified];
    _traitCollection_AnyAny = [UITraitCollection traitCollectionWithTraitsFromCollections:@[traitCollection_hAny, traitCollection_vAny]];
}

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    _willTransitionToPortrait = self.view.frame.size.height > self.view.frame.size.width;
}

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]
    _willTransitionToPortrait = size.height > size.width;
}

-(UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController {
    UITraitCollection *traitCollectionForOverride = _willTransitionToPortrait ? _traitCollection_CompactRegular : _traitCollection_AnyAny;
    return traitCollectionForOverride;
}
@end

ในการสาธิตอย่างรวดเร็วเพื่อดูว่ามันใช้งานได้หรือไม่ฉันได้เพิ่มป้ายกำกับที่กำหนดเองโดยเฉพาะให้กับเลย์เอาต์คอนโทรลเลอร์เด็กรุ่น 'Regular / Regular' และ 'Compact / Regular' ใน IB:

ป้อนคำอธิบายภาพที่นี่ ป้อนคำอธิบายภาพที่นี่

และนี่คือลักษณะการทำงานเมื่อ iPad อยู่ในทั้งสองทิศทาง: ป้อนคำอธิบายภาพที่นี่ ป้อนคำอธิบายภาพที่นี่

โวลา! การกำหนดค่าคลาสขนาดที่กำหนดเองที่รันไทม์

หวังว่า Apple จะทำให้สิ่งนี้ไม่จำเป็นใน OS เวอร์ชันถัดไป ในระหว่างนี้วิธีนี้อาจเป็นวิธีการที่สวยงามและปรับขนาดได้มากกว่าการใช้โปรแกรมโดยยุ่งกับข้อ จำกัด การจัดวางอัตโนมัติหรือการปรับแต่งอื่น ๆ ในโค้ด

~

แก้ไข (6/4/58): โปรดจำไว้ว่าโค้ดตัวอย่างด้านบนเป็นหลักฐานยืนยันแนวคิดเพื่อแสดงเทคนิค ปรับเปลี่ยนได้ตามต้องการสำหรับแอปพลิเคชันเฉพาะของคุณเอง

~

แก้ไข (24/7/58): เป็นเรื่องน่ายินดีที่คำอธิบายข้างต้นดูเหมือนจะช่วยให้เข้าใจปัญหาได้ชัดเจนขึ้น แม้ว่าฉันจะยังไม่ได้ทดสอบโค้ดของ mohamede1945 [ด้านล่าง] ดูเหมือนการเพิ่มประสิทธิภาพที่เป็นประโยชน์สำหรับวัตถุประสงค์ในทางปฏิบัติ อย่าลังเลที่จะทดสอบและแจ้งให้เราทราบว่าคุณคิดอย่างไร (เพื่อความสมบูรณ์ฉันจะปล่อยโค้ดตัวอย่างไว้ด้านบนตามที่เป็นอยู่)


1
โพสต์ยอดเยี่ยม @RonDiamond!
amergin

3
Apple ใช้แนวทางที่คล้ายกันในการกำหนดคลาสขนาดความกว้างใหม่ใน Safari ดังนั้นคุณจึงมั่นใจได้ว่านี่เป็นแนวทางที่ได้รับการสนับสนุนไม่มากก็น้อย คุณไม่ควรต้องการงาช้างพิเศษ UITraitCollectionได้รับการปรับให้เหมาะสมเพียงพอและoverrideTraitCollectionForChildViewControllerเรียกว่าน้อยพอที่จะไม่เป็นปัญหาในการตรวจสอบความกว้างและสร้างขึ้น
zwaldowski

1
@zwaldowski ขอบคุณ โค้ดตัวอย่างที่นี่เป็นเพียงการสาธิตเทคนิคและสามารถปรับให้เหมาะสมได้หลายวิธีตามต้องการ (ตามกฎทั่วไปเมื่อมีการใช้วัตถุซ้ำ ๆ กัน [เช่นเมื่อใดก็ตามที่อุปกรณ์เปลี่ยนทิศทาง] ฉันไม่คิดว่าเป็นความคิดที่ดีที่จะยึดวัตถุไว้ แต่อย่างที่คุณชี้ให้เห็นความแตกต่างของประสิทธิภาพที่นี่ อาจจะน้อยที่สุด)
RonDiamond

1
@Rashmi: ตามที่ฉันพูดถึงในคำอธิบายท้ายที่สุดแล้วมันก็ไม่สำคัญว่าคุณจะเลือกอะไร - คุณแค่จับคู่เลย์เอาต์กับค่า enum คู่หนึ่ง ดังนั้นคุณสามารถใช้ "คลาสขนาด" ใดก็ได้ที่เหมาะสมกับคุณ ฉันแค่ตรวจสอบให้แน่ใจว่ามันไม่ขัดแย้งกับคลาสขนาดอื่น ๆ (ที่ถูกต้อง) ซึ่งอาจได้รับการสืบทอดจากที่ใดที่หนึ่งเป็นค่าเริ่มต้น
RonDiamond

1
สำหรับตัวควบคุมมุมมองเด็กฉันไม่คิดว่ามันสำคัญ คุณควรจะสามารถสร้างอินสแตนซ์ได้โดยทางโปรแกรมหรือจากปลายปากกาตราบใดที่เพิ่มเป็นตัวควบคุมลูกลงในคอนเทนเนอร์อย่างเหมาะสม
RonDiamond

41

เป็นบทสรุปของคำตอบที่ยาวมากโดย RonDiamond สิ่งที่คุณต้องทำคือในตัวควบคุมมุมมองรูทของคุณ

วัตถุประสงค์ -c

- (UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController
{
    if (CGRectGetWidth(self.view.bounds) < CGRectGetHeight(self.view.bounds)) {
        return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
    } else {
        return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
    }
}

รวดเร็ว:

override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection! {
        if view.bounds.width < view.bounds.height {
            return UITraitCollection(horizontalSizeClass: .Compact)
        } else {
            return UITraitCollection(horizontalSizeClass: .Regular)
        }
    }

จากนั้นใน storyborad ให้ใช้ความกว้างกะทัดรัดสำหรับแนวตั้งและความกว้างปกติสำหรับแนวนอน


ฉันสงสัยว่ามันจะทำงานอย่างไรกับโหมดแยกหน้าจอใหม่ ... วิธีหนึ่งที่จะค้นพบ!
mm2001

UITraitCollection ใช้สำหรับ iOS 8.0+ เท่านั้น
mohamede1945

ไม่ได้ผลสำหรับฉันฉันมีมุมมองที่มีมุมมองคอนเทนเนอร์สองรายการซึ่งจำเป็นต้องแสดงในตำแหน่งที่แตกต่างกันขึ้นอยู่กับการวางแนว ฉันสร้างคลาสขนาดที่จำเป็นทั้งหมดซึ่งใช้ได้กับ iPhone ทั้งหมด ฉันลองใช้รหัสของคุณเพื่อแยกการวางแนว iPad ด้วย อย่างไรก็ตามมันจะทำให้มุมมองแปลก ๆ มันไม่ได้เปลี่ยนไปอย่างที่ควรจะเป็น มีเงื่อนงำอะไรที่อาจเกิดขึ้น?
NoSixties

1
นี้ทำงานสำหรับฉันเมื่อฉันลบล้างแทน- (UITraitCollection *)traitCollection overrideTraitCollectionForChildViewControllerนอกจากนี้ข้อ จำกัด ควรตรงกับ traitcollections ดังนั้น wC (hAny)
H. de Jonge

1
@ อพอลโลฉันต้องการ แต่มันจะไม่ตอบคำถามที่แท้จริง ลองดูตัวอย่างวิธีใช้ setOverrideTraitCollection ของ Apple github.com/ios8/AdaptivePhotosAnAdaptiveApplication/blob/master/…
malhal

5

iPad มีลักษณะขนาด 'ปกติ' สำหรับทั้งขนาดแนวนอนและแนวตั้งทำให้ไม่มีความแตกต่างระหว่างแนวตั้งและแนวนอน

ลักษณะขนาดเหล่านี้สามารถแทนที่ได้ในUIViewControllerรหัสคลาสย่อยที่กำหนดเองโดยใช้วิธีการtraitCollectionตัวอย่างเช่น:

- (UITraitCollection *)traitCollection {
    // Distinguish portrait and landscape size traits for iPad, similar to iPhone 7 Plus.
    // Be aware that `traitCollection` documentation advises against overriding it.
    UITraitCollection *superTraits = [super traitCollection];
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        UITraitCollection *horizontalRegular = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
        UITraitCollection *verticalRegular = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular];
        UITraitCollection *regular = [UITraitCollection traitCollectionWithTraitsFromCollections:@[horizontalRegular, verticalRegular]];

        if ([superTraits containsTraitsInCollection:regular]) {
            if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation])) {
                // iPad in portrait orientation
                UITraitCollection *horizontalCompact = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
                return [UITraitCollection traitCollectionWithTraitsFromCollections:@[superTraits, horizontalCompact, verticalRegular]];
            } else {
                // iPad in landscape orientation
                UITraitCollection *verticalCompact = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassCompact];
                return [UITraitCollection traitCollectionWithTraitsFromCollections:@[superTraits, horizontalRegular, verticalCompact]];
            }
        }
    }
    return superTraits;
}

- (BOOL)prefersStatusBarHidden {
    // Override to negate this documented special case, and avoid erratic hiding of status bar in conjunction with `traitCollection` override:
    // For apps linked against iOS 8 or later, this method returns true if the view controller is in a vertically compact environment.
    return NO;
}

สิ่งนี้ทำให้ iPad มีลักษณะขนาดเดียวกับ iPhone 7 Plus โปรดทราบว่าโดยทั่วไปแล้ว iPhone รุ่นอื่น ๆ จะมีลักษณะ 'ความกว้างขนาดเล็ก' (แทนที่จะเป็นความกว้างปกติ) โดยไม่คำนึงถึงการวางแนว

การเลียนแบบ iPhone 7 Plus ด้วยวิธีนี้ทำให้สามารถใช้โมเดลนั้นเป็นสแตนด์อินสำหรับ iPad ใน Interface Builder ของ Xcode ซึ่งไม่ทราบถึงการปรับแต่งในโค้ด

โปรดทราบว่า Split View บน iPad อาจใช้ลักษณะขนาดที่แตกต่างจากการใช้งานแบบเต็มหน้าจอปกติ

คำตอบนี้เป็นไปตามแนวทางในบล็อกโพสต์นี้พร้อมการปรับปรุงบางอย่าง

ปรับปรุง 2019/01/02:การปรับปรุงเพื่อแก้ไขแถบสถานะเป็นระยะ ๆ ที่ซ่อนอยู่ในภูมิทัศน์ iPad และศักยภาพของการเหยียบย่ำ (ใหม่) UITraitCollectionในลักษณะ นอกจากนี้ยังตั้งข้อสังเกตว่าเอกสารของ Apple แนะนำให้ต่อต้านการลบล้างtraitCollectionดังนั้นในอนาคตอาจมีปัญหากับเทคนิคนี้


Apple ระบุว่าtraitCollectionคุณสมบัติเป็นแบบอ่านอย่างเดียว: developer.apple.com/documentation/uikit/uitraitenvironment/…
cleverbit

4

คำตอบที่ยาวและเป็นประโยชน์โดย RonDiamond เป็นการเริ่มต้นที่ดีในการทำความเข้าใจหลักการอย่างไรก็ตามโค้ดที่ใช้ได้กับฉัน (iOS 8+) นั้นใช้วิธีการลบล้าง (UITraitCollection *)traitCollection

ดังนั้นเพิ่มข้อ จำกัด ใน InterfaceBuilder ด้วยรูปแบบสำหรับ Width - Compact ตัวอย่างเช่นสำหรับคุณสมบัติของข้อ จำกัด ที่ติดตั้ง ความกว้าง - ค่าใดก็ได้ที่ใช้ได้กับแนวนอนความกว้าง - ขนาดกะทัดรัดสำหรับแนวตั้ง

หากต้องการเปลี่ยนข้อ จำกัด ในโค้ดตามขนาดตัวควบคุมมุมมองปัจจุบันเพียงเพิ่มสิ่งต่อไปนี้ในคลาส UIViewController ของคุณ:

- (UITraitCollection *)traitCollection
{
    UITraitCollection *verticalRegular = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular];

    if (self.view.bounds.size.width < self.view.bounds.size.height) {
        // wCompact, hRegular
        return [UITraitCollection traitCollectionWithTraitsFromCollections:
                @[[UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact],
                  verticalRegular]];
    } else {
        // wRegular, hRegular
        return [UITraitCollection traitCollectionWithTraitsFromCollections:
                @[[UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular],
                  verticalRegular]];
    }
}

0

โหมดแนวนอนของคุณจะแตกต่างจากโหมดแนวตั้งมากแค่ไหน? หากแตกต่างกันมากอาจเป็นความคิดที่ดีที่จะสร้างตัวควบคุมมุมมองอื่นและโหลดเมื่ออุปกรณ์อยู่ในแนวนอน

ตัวอย่างเช่น

    if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) 
    //load landscape view controller here

ใช่นี่เป็นทางเลือกหนึ่ง แต่ฉันไม่คิดว่ามันเป็นสิ่งที่ดีที่สุด ประเด็นของฉันคือหากมีตัวเลือกในการใช้ลักษณะคลาสการปรับขนาดที่แตกต่างกันสำหรับโหมดแนวตั้งและแนวนอนสำหรับ iPhone ใน ios8 ทำไมไม่เหมือนกันสำหรับ iPad
neelIVP

ก่อน Xcode 6 เราสามารถใช้กระดานเรื่องราวที่แตกต่างกันสำหรับการวางแนวที่แตกต่างกัน นั่นจะไม่มีประสิทธิภาพมากนักหากคอนโทรลเลอร์มุมมองส่วนใหญ่เหมือนกัน แต่สะดวกมากสำหรับการจัดวางที่แตกต่างกัน ใน Xcode 6 ไม่มีวิธีการทำเช่นนั้น บางทีการสร้างตัวควบคุมมุมมองที่แตกต่างกันสำหรับการวางแนวที่แตกต่างกันอาจเป็นทางออกเดียว
Bagusflyer

2
การโหลด viewController ที่แตกต่างกันในแต่ละครั้งดูเหมือนจะไม่มีประสิทธิภาพมากโดยเฉพาะอย่างยิ่งหากมีบางสิ่งเกิดขึ้นบนหน้าจอ จะดีกว่ามากหากใช้มุมมองเดียวกันและจัดการกับข้อ จำกัด การจัดวางอัตโนมัติหรือตำแหน่งขององค์ประกอบในโค้ด หรือใช้แฮ็คที่กล่าวถึงข้างต้นจนกว่า apple จะแก้ไขปัญหานี้
Pahnev

0

เวอร์ชัน Swift 5 มันทำงานได้ดี

override func overrideTraitCollection(forChild childViewController: UIViewController) -> UITraitCollection? {
    if UIScreen.main.bounds.width > UIScreen.main.bounds.height {
        let collections = [UITraitCollection(horizontalSizeClass: .regular),
                           UITraitCollection(verticalSizeClass: .compact)]
        return UITraitCollection(traitsFrom: collections)
    }
    return super.overrideTraitCollection(forChild: childViewController)
}

-3

รหัส Swift 3.0 สำหรับโซลูชัน @RonDiamond

class Test : UIViewController {


var _willTransitionToPortrait: Bool?
var _traitCollection_CompactRegular: UITraitCollection?
var _traitCollection_AnyAny: UITraitCollection?

func viewDidLoad() {
    super.viewDidLoad()
    self.upReferenceSizeClasses = null
}

func setUpReferenceSizeClasses() {
    var traitCollection_hCompact: UITraitCollection = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClassCompact)
    var traitCollection_vRegular: UITraitCollection = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClassRegular)
    _traitCollection_CompactRegular = UITraitCollection(traitsFromCollections: [traitCollection_hCompact,traitCollection_vRegular])
    var traitCollection_hAny: UITraitCollection = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClassUnspecified)
    var traitCollection_vAny: UITraitCollection = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClassUnspecified)
    _traitCollection_AnyAny = UITraitCollection(traitsFromCollections: [traitCollection_hAny,traitCollection_vAny])
}

func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    _willTransitionToPortrait = self.view.frame.size.height > self.view.frame.size.width
}

func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    _willTransitionToPortrait = size.height > size.width
}

func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection {
    var traitCollectionForOverride: UITraitCollection = _willTransitionToPortrait ? _traitCollection_CompactRegular : _traitCollection_AnyAny
    return traitCollectionForOverride
}}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.