菜鸟教程小白 发表于 2022-12-12 19:31:25

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


                                            <p><p>我在 iPhone 上有一个分组样式的 <code>UITableViewController</code>。我现在在 iOS 7.0.6 上。在我的一些单元格上是 <code>UITextField</code> 的。编辑文本字段时,滚动区域自动调整;我没有添加代码来做到这一点。我唯一拥有的与滚动相关的东西是:</p>

<pre><code>[self.tableView scrollToRowAtIndexPath:nameIndexPath
                      atScrollPosition:UITableViewScrollPositionNone
                              animated:YES];
</code></pre>

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

<p>我的问题是,在键盘可见的情况下,我可以将表格内容向上滚动太多。似乎恰好是标签栏高度太远了;我的应用是基于标签栏的。在下图中,您可以看到滚动条在键盘上方停止了一个标签栏高度。 (不重要的说明:文本字段一直向上滚动,所以你看不到它。)</p>

<p>看起来像另一个 iOS 7 错误。任何想法我可以如何解决这个问题,因为它看起来相当草率。 </p>

<p> <img src="/image/60fr5.png" alt="enter image description here"/> </p>

<p>注意:在其他情况下,我在 iOS 上也看到过类似的插入问题。我想很快就会修复(至少我希望如此;因为这些是一个非常简单的 iOS 错误)。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>原来 <code>contentInset</code> 和 <code>scrollIndicatorInsets</code> 都不正确:<code>(64, 0, **265**, 0)</code>。底部插入值为 55 磅(即标签栏高度)。</p>

<p>正确的底部插图当然必须是键盘高度<code>216</code>。</p>

<p>在 Apple 齐心协力之前解决这个问题:</p>

<pre><code>- (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 &#39;way before&#39; the keyboard animation has finished.
      ;
      ;
    });

    return YES;
}
</code></pre>

<p>和:</p>

<pre><code>- (BOOL)textFieldShouldReturn:(UITextField*)textField
{
    ;

    // 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.
    ;
    ;

    return YES;
}
</code></pre>

<p>编辑:为确保此解决方法能够抵抗 Apple 修复,让我们这样做:</p>

<pre><code>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)
    {
      ;
      ;
    }
});
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 UITableViewController 上编辑 UITextField 时滚动区域不正确,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/22051373/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/22051373/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 UITableViewController 上编辑 UITextField 时滚动区域不正确