2013-01-07 39 views
0

希望以下給出的一切要求。如何解決UIView autoresizingMask設置正確但不解決?

有一行代碼調整我的應用程序中父視圖的框架,受影響的子視圖沒有按照我對autoresizingMask的期望以適當的方式響應。

viewController.view子視圖有1個子視圖,所有邊距都調整大小,並且框架爲0,0,320,270。

viewController.view具有幀= 0,0,320,276

調整viewController.view到0,64,1024,704

所述一個子視圖粘在底部,基本上相同的效果後,好像有子視圖中沒有靈活的底部邊緣。

352,434,320,270。正確的大小,它沒有調整大小。但是從超級觀點的頂部開始有434點,再加上超級觀點的高度270,= 704。

我希望270子視圖高度和704之間的434差異在頂部和底部邊距之間保持平衡。

但是,頂部和底部邊距都指定爲調整大小。我很困惑。可能我已經忘了代碼,這很容易。

也許這與一些特殊處理有關,當邊距爲零時,但另一個邊距不爲零。以前從未嘗試過這種情況。

PO [viewController.view子視圖]

(ID)$ 1 = 0x09696340 < __NSArrayM 0x9696340>(

<的UIView:0x9695790;幀=(0 0; 320 270);自動調整大小= LM + RM + TM + BM; 層= <的CALayer:0x96957f0 >>

(LLDB)PO viewController.view

(UIView *)$ 2 = 0x09695ab0 < UIView:0x9695ab0; frame =(0 0; 320 276); autoresize = W + H;層= <的CALayer:0x9695b10 >>

然後一行代碼來改變上海華:

viewController.view.frame = {...}; 

(LLDB)PO viewController.view

(UIView的*)$ 3 = 0x09695ab0 < UIView:0x9695ab0; frame =(0 64; 1024 704); autoresize = W + H;層= < CALayer:0x9695b10 >>

(lldb)po [viewController。視圖子視圖]

(ID)$ 4 = 0x09696340 < __NSArrayM 0x9696340>(

<的UIView:0x9695790;幀=(352 434; 320 270);自動調整大小= LM + RM + TM + BM;層= <的CALayer:0x96957f0 >>

編輯 -

該問題可能是另一個特性是在第效果我不知道。也許像自動佈局或約束,但自動佈局被關閉。另外,superview不是一個自定義的UIView子類,在layoutSubviews中有一些奇特的東西。這是純粹的UIKit的東西。

+0

您是如何添加從nib文件創建視圖及其子視圖的,或者是以編程方式創建的?如果通過代碼,那麼你需要設置子視圖的屬性[autoresizingMask](http://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/occ/instp/UIView/autoresizingMask) – otakuProgrammer

+0

它們是從一個筆尖創建的。但它不應該是正確的?我從代碼和筆尖創建了視圖,並在代碼和筆尖中來回地手動定義了autoresizingMask。該文檔說默認值是UIViewAutoresizingNone –

+0

我想知道是否有另一個屬性,我失蹤。可能與自動佈局或約束有關,但自動佈局被關閉。 –

回答

0

您正在嘗試添加從nib的視圖。所以,根據我的觀點,當應用程序啓動時,筆尖首先被執行。此時您的視圖不包含設備或超級視圖的實際大小。所以當應用程序啓動時,它會佔用您定義的實際大小,並會添加初始大小的子視圖。因此,我的建議是在ViewWillAppear()或ViewDidAppear()中添加視圖,因爲此時設備的實際大小是獲取的,您將獲得適當的視圖大小和位置。