2013-05-17 96 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和控件简单地添加到视图中。也许这是问题,因为它是模态? –

相关问题