tra*_*per 10 objective-c uitableview ios autolayout
我认为根本原因在于它estimatedRowHeight用于对底层证券做出假设UIScrollView.contentOffset,但这定义总是错误的,因为它是一个估计值.实际行高度完全不同,具体取决于单元格内容和设备方向.
即使我实施estimatedHeightForRowAtIndexPath提供更接近的估计,故障仍然存在.
因此,当您从顶部开始并向下滚动时,一切都很顺利,因为TableView会了解实际的单元格高度,因为它会使contentOffset与单元格位置保持同步.但是一旦你旋转所有真实的单元格高度变化所以UITableView现在不同步,它不知道滚动到哪里.
但是甚至有些奇怪的事情也会发生,有时候UITextField细胞最终会停留在另一个细胞的顶部,并且仍然卡在那里......
无论如何,我把它煮成一个简单的例子.
https://github.com/trapper-/autolayout-glitch
UITextField's,以便UITableView需要滚动以确保该字段可见.我玩弄了你的代码几分钟,因为我在类似的问题上遇到了困难。我希望我能提供帮助,但我没有完全解决它。
我能提供的是我确实做了一些进步。
当设备旋转时,您应该实现 UIViewcontroller 方法来告诉您它将发生并且确实发生了。当发生这种情况时,缓存可见行。然后,完成后,重新加载表格并滚动到那些可见的行。
它看起来像这样:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
// Save the visible row position
self.visibleRows = [self.tableView indexPathsForVisibleRows];
}
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[self.tableView reloadData];
// Scroll to the saved position prior to screen rotate
[self.tableView scrollToRowAtIndexPath:[self.visibleRows objectAtIndex:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}
Run Code Online (Sandbox Code Playgroud)
visibleRows 是 ViewController 上的一个数组 @property。
这使它到达正确的位置(我怀疑,如果您实际上存储了用户正在操作的单个单元格,那么每次都会 100% 到达正确的单元格。
但这样做并没有解决问题,在多次设备旋转的情况下,(有时)仍然会出现舞动的 UITextField 布局不正确的情况。
再说一次,这不是一个解决方案 - 但我想分享我所看到的,所以希望这可以帮助您找到解决方案。
祝你好运!
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |