2013-05-17 99 views
0

我在它下面有tableview和幾個控件(文本框,按鈕和標籤)。tableview不會在父視圖調整後調整大小

當鍵盤顯示時,我可以減少父視圖高度或將其向上滑動,以便可以訪問我的控件。

這部分工作正常。

但是我也想調整tableview,所以我試着降低它的高度(如果我減小父視圖的高度)或向下移動origin.y座標(如果我滑動父視圖)。

既沒有工作,即tableView不會改變到新的框架,它保持不變。如果我不操縱父視圖,即如果我單獨調整tableView框架,tableview只會調整大小。

以下是一個方法:

-(void)resizeTbl:(int)pnts{ 
CGRect tblframe = self.myTable.frame; 
//tblframe.origin.y+=pnts; 
tblframe.size.height-=pnts; 
self.myTable.frame =tblframe;} 


-(void)keyboardWillShow:(NSNotification *)notif{ 
int pnts=160; 
CGRect frame = self.view.frame; 
//frame.origin.y-=pnts; 
frame.size.height-=pnts; 
self.view.frame = frame; 
[self resizeTbl:pnts];} 

我大概可以由一上把所有的控件,然後調整表格大小會工作,但我覺得應該有一個更簡單的方法。任何建議將不勝感激。

更新/解決方法: 由於表格調整大小獨自工作很好,我添加了一個觀察者 - keyboardDidShow,並將鍵盤調整大小myTableWinShow到鍵盤啓動後照顧桌面視圖。

-(void)keyboardDidShow:(NSNotification *)notif{ 
[self resizeTbl:160];} 

因此,所有的觀點上來,因爲他們都應該現在。

但是,當焦點從一個文本框移動到另一個文本框時,鍵盤已經啓動,tableView自行調整到原始框架,我無法捕捉到它的時間和方式。然後,當鍵盤出現故障的tableView擴大超出其原有的框架,因爲我必須

-(void)keyboardDidHide:(NSNotification *)notif{ 
[self resizeTbl:-160];} 

然而,當焦點再次發生變化的tableView收縮恢復到正常框架,一切看起來就好了。如果我能以某種方式防止那些不必要的tableview調整大小,搞砸了。

如果有人能理解這一切,我會非常感激。

更新:

我明白了。 Autolayout搞砸了我。我把它關掉like that和我的邏輯現在工作,沒有毛刺。

+1

確保爲表視圖設置了「autoresizingMask」。 – rmaddy

+0

sry,不認爲這是問題導致它調整如果單獨完成,並且我嘗試了你的建議 - 沒有效果 –

+1

它看起來像一個iOS相關的問題,但是誰知道? –

回答

1

什麼是視圖的autoResizingMask設置爲?

初始化表格視圖時試試這個。

self.myTable.autoresizingMask = UIViewAutoresizingFlexibleHeight; 

這將導致表視圖將與其父視圖調整大小。

+0

sry,不要認爲這是問題導致它調整如果單獨完成,並且我嘗試了你的建議 - 沒有影響 –

0

您不能更改self.view.frame。您應該有一個容器視圖self.view以上,其中包含self.myTable以及您需要的所有其他控件。 self.myTable和其他控件應該有正確的autoresizingMask

當顯示鍵盤時,您將調整容器視圖的大小,所有其他視圖將遵循它們的autoresizingMasks

-(void)keyboardWillShow:(NSNotification *)notif{ 
    int pnts=160; 
    CGRect rect = self.view.bounds; 
    rect.size.height-=pnts; 
    self.containerView.frame = rect; 

    // the following should not be needed if self.myTableView.autoresizingMask 
    // is at least UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleTopMargin 
    // but you can try adding this 
    self.myTableView.frame = self.containerView.bounds; 
} 
+0

視圖上方沒有容器。視圖呈現爲模態視圖。 tableview和控件簡單地添加到視圖中。也許這是問題,因爲它是模態? –

相關問題