在父视图调整大小后,tableview不会调整大小

时间:2013-05-17 18:04:08

标签: ios objective-c uitableview

我有桌面视图和几个控件(文本字段,按钮和标签)。

当键盘显示时,我可以减少父视图高度或向上滑动,以便可以访问我的控件。

那部分工作正常。

但是我也想调整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,并将键盘调整后的调整大小myTable移动到那里以处理tableview。

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

所以所有的观点都应该按照现在的样子出现。

然而,当焦点已经从一个文本框移动到另一个文本框时,tableView会自动调整到原始框架,我无法捕捉它何时以及如何执行。然后,当键盘关闭时,tableView会扩展到其原始帧之外,因为我必须

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

然而,当焦点再次改变时,tableView会缩回到正常的帧,一切看起来都很好。如果我能以某种方式防止那些不必要的tableview调整大小搞乱。

如果有人能够理解所有这些,我会非常感激。

更新

我明白了。 Autolayout搞砸了我。我将其关闭like that,我的逻辑现在有效,没有任何故障。

2 个答案:

答案 0 :(得分:1)

视图的autoResizingMask设置为什么?

初始化表格视图时尝试此操作。

self.myTable.autoresizingMask = UIViewAutoresizingFlexibleHeight;

这将导致使用其父视图调整表视图的大小。

答案 1 :(得分: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;
}