2014-05-20 94 views
0

我有一個視圖,其子視圖的框架需要根據用戶操作進行動態更改。當視圖被加載,我初始化其子視圖這樣的:在iOS應用程序中動態更改子視圖框架

if (self.firstSubview == nil) { 
    NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"FirstSubView" owner:self options:nil]; 
    for (UIView *view in views) { 
     self.firstSubview = view; 
    } 
} 

然後:

[self.view addSubview:self.firstSubview]; 

初始化後,當我想修改子視圖的框架,我做這樣的事情:

self.firstSubview.frame = CGRectMake(0, 80, self.firstSubview.frame.size.width, 200); 

我想要做的是在用戶點擊一個按鈕時調整子視圖的Y座標及其高度,並在用戶再次點擊該按鈕時將子視圖的原始幀取回。但是,我發現有時這不起作用,Y座標和高度似乎並不總是像我在CGRectMake函數中所說的那樣設置。它看起來像函數不總是取絕對值,而是取決於最後一幀的值,而是......我的意思是,看起來並不總是這個函數調用後框架取Y = 80座標。

也許我誤解是如何工作的:在意見nib文件,我已經在其Simulated Metrics設置頂部和底部的酒吧,所以視圖的高度應該是那些酒吧和(0,0)之間的剩餘空間座標應該是頂部欄下方的左上角,對吧?有什麼我失蹤?每次我想改變其框架時,是否應該重新初始化並添加子視圖?或者還有什麼我應該做的應用框架的變化?

在此先感謝

+0

不,你不應該每次重新初始化子視圖?你是否也爲你的子視圖使用了一個nib文件?它是否也包含模擬指標? – streem

+0

是的,我有我的子視圖在另一個'nib'文件沒有模擬度量設置... – AppsDev

回答

0

的for-in循環您發佈將設置從數組視圖中的每個元素,以便進入self.firstSubview屬性,使循環self.firstSubview後會有最後一個。如果這真的是你想要的,那麼這裏有一個簡單的方法:

if (views.count > 0) 
    self.firstSubview = views.lastObject; 

或許:

for (id element in views) 
{ 
    if ([element isKindOfClass:[UIView class]]) 
    { 
     self.firstSubview = element; 
     break; 
    } 
} 
相關問題