我有桌面视图和几个控件(文本字段,按钮和标签)。
当键盘显示时,我可以减少父视图高度或向上滑动,以便可以访问我的控件。
那部分工作正常。
但是我也想调整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,我的逻辑现在有效,没有任何故障。
答案 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;
}