菜鸟教程小白 发表于 2022-12-12 10:29:31

ios - 动画后重新加载 UITableView 重置帧


                                            <p><p>我一直被这个问题困扰,我真的很好奇为什么会这样。我使用下面显示的简单示例重新创建了我的问题。我在 View 底部放置了一个带有自定义 UITableViewCell(在单元格中心包含一个 UILabel)的 UITableView,顶部是一个 UISearchBar。</p>

<p>当键盘弹出时,我为 UITableView 设置动画以更改其框架以适应 UISearchBar 下方和键盘上方的空间。现在,当我输入任何搜索文本并重新加载 UITableView 时,UITableView 会在动画之前更改其帧。</p>

<p>最初 -</p>

<pre><code>UITableView Frame: {{0, 223}, {320, 237}} - {{x, y},{width, height}}
</code></pre>

<p>动画后 -</p>

<pre><code>UITableView Frame: {{0, 44}, {320, 436}} - {(x, y),(width, height)}
</code></pre>

<p>当我输入任何搜索文本时 - <code>UITableView Frame: {{0, 223}, {320, 237}} - {{x, y},{width, height}}</code></p >

<p>我注意到这只发生在自定义 UITableViewCell 上。我四处寻找答案,但一无所获。我尝试将 UILabel 作为 subview 添加到自定义 UITableViewCell 中的 contentView ,但这没有用。所以我的问题是,如何防止 UITableView 将其框架恢复为原始值?</p>

<p><strong>编辑</strong>:这是我在动画后更改 UITableView 框架的代码。</p>

<pre><code>- (void)keyboardDisplayed:(NSNotification*)notification
{
    NSDictionary* keyboardInfo = ;
    NSValue* keyboardValue = ;
    CGRect keyboardFrame = ;

    CGRect frame = self.testTabl.frame;
    frame.origin.y = self.testSearchBar.frame.origin.y + self.testSearchBar.frame.size.height;
    frame.size.height = keyboardFrame.origin.y - frame.origin.y;

    [UIView animateWithDuration:0.3 animations:^{
      ;
    }];

    NSLog(@&#34;TableView Frame: %@&#34;, NSStringFromCGRect(self.testTabl.frame));
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我不确定它是否解释了您所看到的行为,但您代码中的主要问题是您需要改用 UIKeyboardFrameEndUserInfoKey。像下面这样的东西应该可以工作:</p>

<pre><code>- (void)keyboardDisplayed:(NSNotification*)notification
{
    NSDictionary* keyboardInfo = ;
    CGPoint endPoint = [ CGRectValue].origin;
    CGFloat duration = [ floatValue];

    CGRect frame = self.testTabl.frame;
    frame.size.height = .y;

    [UIView animateWithDuration:duration animations:^{
      ;
    }];

    NSLog(@&#34;TableView Frame: %@&#34;, NSStringFromCGRect(self.testTabl.frame));
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 动画后重新加载 UITableView 重置帧,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/16010312/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/16010312/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 动画后重新加载 UITableView 重置帧