Objective c 将contentInset设置为UITableView也会设置行动画';子视图';框架
我有一个自定义单元格的UITableView。当然,在cellForRowAtIndexPath中,我尝试将一个旧的单元格出列并重用它。每个单元格都有一个自动调整大小视图的层次结构:我在cellForRowAtIndexPath中设置顶视图的内容时设置了顶视图的框架,其子视图相应地更改了它们的框架。请注意,行高度也是动态的。 当我只是滚动表格(包含不同内容和帧的行)时,一切都很好。但是我在这个表的同一视图中也有一个文本字段,所以我需要滚动表的内容来补偿显示/隐藏的键盘。我为以下内容设置contentInset属性的动画:Objective c 将contentInset设置为UITableView也会设置行动画';子视图';框架,objective-c,uitableview,core-animation,Objective C,Uitableview,Core Animation,我有一个自定义单元格的UITableView。当然,在cellForRowAtIndexPath中,我尝试将一个旧的单元格出列并重用它。每个单元格都有一个自动调整大小视图的层次结构:我在cellForRowAtIndexPath中设置顶视图的内容时设置了顶视图的框架,其子视图相应地更改了它们的框架。请注意,行高度也是动态的。 当我只是滚动表格(包含不同内容和帧的行)时,一切都很好。但是我在这个表的同一视图中也有一个文本字段,所以我需要滚动表的内容来补偿显示/隐藏的键盘。我为以下内容设置conte
// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
NSTimeInterval animationDuration = [[aNotification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
UIViewAnimationCurve animationCurve = [[aNotification.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
[UIView setAnimationCurve:animationCurve];
[UIView animateWithDuration:animationDuration animations:^{
messagesTable.contentInset = UIEdgeInsetsMake(0, 0, kHSTableBottomInset, 0);
messagesTable.scrollIndicatorInsets = UIEdgeInsetsZero;
}];
}
它的工作原理也很好,但有一个有趣的问题:当键盘被隐藏,contentInset动画恢复正常(kHSTableBottomInset是一个很小的值以保持边距)时,table会重新加载单元格,这些单元格将从上方滚动显示。问题是,这种重新加载也是在动画块内部完成的!因此,当我在cellForRowAtIndexPath(称为部分或重新加载)中更改出列的子视图帧(特别是宽度)时,此更改也会设置动画,并且在单元格向下滚动到视图时可见。
我能避免这种行为吗?我终于找到了解决方案:帧设置代码可以像这样从动画中排除:
[CATransaction begin];
[CATransaction setDisableActions:YES];
mainDataView.frame = rect;
[CATransaction commit];
或
在这里找到答案:通过将
clipstobunds
YES设置为tableview
解决了此问题
tableView.clipsToBounds = YES:
如果仍然存在问题,请将clipstobunds
也设置为footerview
tableView.clipsToBounds = YES: