gpt4 book ai didi

ios - 在 UITableViewController 上编辑 UITextField 时滚动区域不正确

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:10 25 4
gpt4 key购买 nike

我在 iPhone 上有一个分组样式的 UITableViewController。我现在在 iOS 7.0.6 上。在我的一些单元格上是 UITextField 的。编辑文本域时,自动调整滚动区域;我没有添加代码来执行此操作。我唯一与滚动相关的东西是:

[self.tableView scrollToRowAtIndexPath:nameIndexPath
atScrollPosition:UITableViewScrollPositionNone
animated:YES];

但我只在 textField:shouldChangeCharactersInRange:replacementString: 中调用它,所以当我点击文本字段时甚至都不会调用它。

我的问题是,在键盘可见的情况下,我可以将表格内容向上滚动太多。似乎正是标签栏的高度太高了;我的应用程序是基于标签栏的。在下图中,您可以看到滚动条在键盘上方停止了一个标签栏高度。 (不重要的注意事项:文本字段一直向上滚动,因此您看不到它。)

看起来像是另一个 iOS 7 错误。任何想法我可以解决这个问题,因为它看起来很草率。

enter image description here

注意:我在其他情况下看到过 iOS 的类似插入问题。我想很快就会被修复(至少我希望如此;因为这些都是非常简单的 iOS 错误)。

最佳答案

原来 contentInsetscrollIndicatorInsets 都不正确:(64, 0, **265**, 0)。底部插入值偏离 55 点(即标签栏高度)。

正确的底部插图当然必须正好是键盘高度 216

要解决这个问题,直到 Apple 齐心协力:

- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.6 * NSEC_PER_SEC));
dispatch_after(when, dispatch_get_main_queue(), ^(void)
{
// Must be delayed until after iOS has adjusted the insets,
// which turns out to be 'way before' the keyboard animation has finished.
[self.tableView setContentInset:UIEdgeInsetsMake(64, 0, 216, 0)];
[self.tableView setScrollIndicatorInsets:UIEdgeInsetsMake(64, 0, 216, 0)];
});

return YES;
}

和:

- (BOOL)textFieldShouldReturn:(UITextField*)textField
{
[textField resignFirstResponder];

// iOS seems to set the insets differential: So we must set them back
// to the incorrect values for iOS to subtract the bottom inset back
// to 55 again.
// No delay needed here of course because we must do this before the
// keyboard animation starts.
[self.tableView setContentInset:UIEdgeInsetsMake(64, 0, 265, 0)];
[self.tableView setScrollIndicatorInsets:UIEdgeInsetsMake(64, 0, 265, 0)];

return YES;
}

编辑:为确保此变通办法能够抵抗 Apple 修复,让我们这样做:

dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.6 * NSEC_PER_SEC));
dispatch_after(when, dispatch_get_main_queue(), ^(void)
{
if (self.tableView.contentInset.bottom == 265)
{
[self.tableView setContentInset:UIEdgeInsetsMake(64, 0, 216, 0)];
[self.tableView setScrollIndicatorInsets:UIEdgeInsetsMake(64, 0, 216, 0)];
}
});

关于ios - 在 UITableViewController 上编辑 UITextField 时滚动区域不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com