簡體   English   中英

iphone 6 plus 上具有 600x600 pt 框架的 UIViews

[英]UIViews with a frame of 600x600 pt on iphone 6 plus with size classes

我正在開發一個適用於所有設備(iPad、iPhone)的應用程序。 我為 iPad 和 iPhone 平台使用了不同的 xib 文件(只是因為原始應用程序僅適用於 iPad,並且效果很好(沒有任何自動布局))。

我的 iPhone xib 文件使用自動布局和大小類。 我有啟動屏幕,我已經設置好了啟動圖像。 當應用程序啟動時,viewDidLoad 中的視圖框架為 600x600,但沒關系,在 viewWillAppear 之前我不會對它做任何事情。

此時,xib 文件的框架是正確的(對於 iphone5 和 iphone 6 和 iPhone 6+)。 但是我在這個 xib 中幾乎沒有其他視圖與主視圖平行(不是任何其他視圖的子視圖)。 所有這些其他視圖都有一個 600x600 的框架。

我可以明確設置框架,但我必須手動調整每個子視圖的大小...

如果我關閉尺寸類並僅使用自動布局,則框架始終為 iphone 5s 尺寸。

PS 我剛剛添加了所有可能的啟動圖像(正確的尺寸)刪除的尺寸類別和尺寸如下:主視圖 - 框架 = (0 0; 667 375)

在 xib 中查看它旁邊的視圖(不是子視圖,但它也必須是全屏視圖)- frame = (0 0; 568 320)

所有視圖大小都是內在的和景觀的。

編輯 1所以我的問題是:xib 中的其他視圖如何在正確的框架中初始化? 不是 600x600。

如果我使用“在視圖層次結構中調試”,我可以看到除主“視圖”之外的所有根視圖(不是任何子視圖)的大小都不正確。 即使正確報告了屏幕邊界,視圖仍保持 600x600 大小。

編輯 2這個問題提出了類似的問題: iOS 8 top layout guide auto layout questions 但沒有給出可以普遍解決問題的答案。

如果我將所有其他視圖作為子視圖添加到我的主視圖中,框架的大小會正確(由於自動布局),但這對我來說不是一個選擇,因為我不能在啟動時將它們全部作為子視圖。

所以這就是我讓它為我工作的方式:

一旦我添加了具有錯誤框架的子視圖,我就會向它添加自動布局約束,如下所示:

[self.view addSubview:_subviewFromSameXib];  //naming just for example

_subviewFromSameXib.translatesAutoresizingMaskIntoConstraints = NO;


[self.view addConstraint:[NSLayoutConstraint constraintWithItem:_subviewFromSameXib
                                                          attribute:NSLayoutAttributeTop
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self.view
                                                          attribute:NSLayoutAttributeTop
                                                         multiplier:1.0
                                                           constant:0.0]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:_subviewFromSameXib
                                                          attribute:NSLayoutAttributeLeading
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self.view
                                                          attribute:NSLayoutAttributeLeading
                                                         multiplier:1.0
                                                           constant:0.0]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:_subviewFromSameXib
                                                          attribute:NSLayoutAttributeBottom
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self.view
                                                          attribute:NSLayoutAttributeBottom
                                                         multiplier:1.0
                                                           constant:0.0]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:_subviewFromSameXib
                                                          attribute:NSLayoutAttributeTrailing
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self.view
                                                          attribute:NSLayoutAttributeTrailing
                                                         multiplier:1.0
                                                           constant:0.0]];

這將執行以下操作:在添加我的子視圖之后,它添加了新的約束,告訴這個子視圖它必須根據其父視圖來調整大小。

這解決了我的問題,但沒有解決主要問題:xib 中的多個視圖不會根據屏幕邊界調整大小。 只有第一個可以。

順便說一句,我使用的是xibs而不是故事板。 我應該補充一點,游樂場在所有設備上正確顯示所有視圖。 只有在運行時它們才會搞砸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM