ios - 我该如何修复或解决此 tableView textField 自动布局故障?

标签 ios objective-c uitableview autolayout

我认为根本原因是 estimatedRowHeight 用于对底层 UIScrollView.contentOffset 进行假设,但这根据定义总是错误的,因为它是估计。实际行高完全不同,具体取决于单元格内容和设备方向。

即使我实现 estimatedHeightForRowAtIndexPath 以提供更接近的估计,但问题仍然存在。

因此,当您从顶部开始并向下滚动时,一切都很好,因为 TableView 会在保持 contentOffset 与单元格位置同步的同时学习实际的单元格高度。但是,一旦您旋转了所有实际单元格高度,UITableView 现在就不再同步了,它不知道要滚动到哪里。

但也有更奇怪的事情发生,有时 UITextField 单元格最终会位于另一个单元格之上,并一直卡在那里...

无论如何,我已经将其归结为一个简单的示例。

https://github.com/trapper-/autolayout-glitch

  • 使用 iPhone 进行测试,如果使用模拟器,则启用软件键盘。
  • 您会看到许多视觉故障只是在滚动、选择字段和旋转时出现。
  • 对于一个简单的可重复的例子。
  • 向下滚动到底部。
  • 选择最后一对 UITextField 之一,这样 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];
}

visibleRows 是 ViewController 上的一个数组@property。

这使它到达了正确的位置(我怀疑如果您实际上存储了用户正在操作的单个单元格,那么每次都会让您 100% 到达正确的单元格。

这没有做的是,随着设备的多次旋转,舞动的 UITextFields 的布局仍然不正确(有时)。

同样,这不是解决方案 - 但我想分享我所看到的,希望这能帮助您找到解决方案。

祝你好运!

关于ios - 我该如何修复或解决此 tableView textField 自动布局故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41030340/

相关文章:

ios - UITextField.Text 从其他 View 返回 null

ios - insertRowsAtIndexPaths 中的 NSInternalInconsistencyException

ios - 如何通过 Swift 中的 ContainerView 更改 TableView 中项目的属性?

ios - 当 collectionviewcell 被释放时

ios - NSURLCredential 是永久的吗?

ios - "viewWillTransitionToSize:"在 iOS 9 中以模态方式呈现 View Controller 时未调用

ios - 在 IOS7 中验证更多文本字段

iphone - PresentModalViewController之后如何访问parentViewController?

ios - 从一个 View Controller 转到不同的 Controller

ios - Swift Youtube 播放器内存泄漏