0

我在它下面有表格视图和几个控件(文本字段、按钮和标签)。

当键盘出现时,我可以降低父视图高度或向上滑动,以便可以访问我的控件。

那部分工作正常。

但是我也想调整 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];}

我可能可以将所有控件一个一个向上移动,然后表格调整大小就可以了,但我认为应该有一种更简单的方法。任何建议将不胜感激。

更新/解决方法:由于 table resize 单独工作就很好,我又添加了一个观察者 - keyboardDidShow,并将 resize myTable 从 keyboardWilShow 移到那里,以便在键盘启动后处理 tableview。

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

所以所有的观点都像现在应该出现的那样出现。

但是,当焦点从一个文本框移动到另一个文本框并且键盘已经打开时,tableView 会自行调整到其原始框架,我无法捕捉到它何时以及如何做到这一点。然后,当键盘按下时,tableView 扩展超出了它的原始框架,因为我必须有

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

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

如果有人能理解所有这些,我将不胜感激。

更新:

我知道了。自动布局把我弄乱了。我像那样把它关掉了,我的逻辑现在可以工作了,没有故障。

4

2 回答 2

1

视图的 autoResizingMask 设置为什么?

当你初始化表格视图时试试这个。

self.myTable.autoresizingMask = UIViewAutoresizingFlexibleHeight;

这将导致表格视图与它的父视图一起调整大小。

于 2013-05-17T18:08:26.677 回答
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;
}
于 2013-05-18T00:35:16.883 回答