亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

適用于iPad縱向和橫向模式的尺寸等級

適用于iPad縱向和橫向模式的尺寸等級

繁星coding 2019-08-29 17:36:39
適用于iPad縱向和橫向模式的尺寸等級我基本上希望根據iPad(縱向或橫向)的方向使用xcode 6中引入的大小調整類來定位不同的子視圖。我已經找到了許多教程,解釋了IB在縱向和橫向上如何為Iphone提供不同的大小調整類。但是,似乎沒有任何內容涵蓋IB上的iPad的個人風景或肖像模式。有人可以幫忙嗎?
查看完整描述

3 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

作為RonDiamond的長篇答案的摘要。您需要做的就是在根視圖控制器中。

Objective-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中使用緊湊寬度為縱向和常規寬度為橫向。


查看完整回答
反對 回復 2019-08-29
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

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允許該模型在Xcode的Interface Builder中用作iPad的替身,它不知道代碼中的自定義。

請注意,iPad上的分割視圖可能會使用與普通全屏操作不同的大小特征。

這個答案是基于這篇博客文章中采用的方法,并做了一些改進。

更新以修復iPad版本中的間歇性隱藏狀態欄,以及潛在的(更新)特征的踐踏UITraitCollection。還注意到Apple文檔實際上建議不要覆蓋traitCollection,因此將來可能會出現這種技術的問題。


查看完整回答
反對 回復 2019-08-29
  • 3 回答
  • 0 關注
  • 893 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號