gpt4 book ai didi

iphone - UISearchBar 的范围按钮覆盖了第一行结果

转载 作者:行者123 更新时间:2023-12-01 18:32:51 25 4
gpt4 key购买 nike

我第一次使用 UISearchBar 并不能完全按照我的意愿行事。

当您激活范围按钮时,它们会覆盖表格的第一行。查看所有搜索结果的唯一方法似乎是在编辑完成后隐藏范围按钮;在我的谷歌搜索中,我看到了这个建议。

我想要 Mail 具有的功能,只要搜索框中有文本,范围按钮就会一直保持,并且您可以看到搜索结果会随着您更改事件范围按钮而发生变化。但是如果没有范围按钮覆盖表格的第一行,我无法想出任何方法来实现这一点。您不能只向下滚动表格 View ;搜索栏位于表格 View 的标题中,因此整个内容一起滚动。

建议赞赏!

在尝试了以下 Andrew 的建议后更新。

我忘记的一件事是,在 viewDidAppear 中,我向上滚动表格 View 内容,以便搜索框不在屏幕顶部,但可以在需要时向下滚动。这显然是我的问题的一部分。所以,在 viewDidAppear 我有

if (theSearchBar.showsScopeBar != YES) {
[self.tableView setContentOffset:CGPointMake(0, 44) animated:YES];
}

在 searchBarShouldBeginEditing 中,我现在有:
[self.navigationController setNavigationBarHidden:YES];
[self.tableView setContentOffset:CGPointMake(0, -44) animated:YES];
[UIView beginAnimations:@"searchBarUp" context:nil];
[UIView setAnimationDuration:1.0f];
searchBar.frame = CGRectOffset(searchBar.frame, 0, -44);
[UIView commitAnimations];

这给出了正确的结果,但是当范围栏出现时, View 顶部和搜索栏顶部之间存在间隙,并且第一行被覆盖。然后滚动条(带有范围按钮)向上滑动到位。这显然看起来不太好。

我希望上面的代码做的是:
  • 隐藏导航栏,这会将表格的第一行放在状态栏的正下方
  • 向下滚动表格内容,这会将搜索栏的顶部放在状态栏的正下方
  • 向上移动搜索栏,使搜索栏底部之间有 44 像素的间隙,由范围按钮
  • 填充

    这似乎确实发生了,除了您可以看到导航栏留下的间隙,直到滚动条向上移动以满足它。你会认为这可以通过最后隐藏导航栏来解决,但是没有......当我尝试时,我最终得到了表格的第一行和状态栏和搜索栏之间的导航栏大小的孔。

    我觉得很奇怪的另一件事是,如果我按原样使用上面的代码片段,除了在调用 setContentOffset 时使用动画:NO,我会得到不同的结果。在这种情况下,表格的第一行没有被覆盖,但搜索框位于 View 顶部上方,无法向下滚动(不会留下)。只有范围按钮可见。对我来说,仅仅关闭动画就会改变结果是没有意义的。

    现在,您可能会认为所有内容都在正确的位置,显示搜索结果就可以了。但不是。即使现在导航栏已经消失了,搜索栏仍然在其上方出现了很大的差距,并且需要对表格内容和搜索栏框架进行相同的调整。

    我应该注意 viewWillAppear 中的代码只执行一次,因为我们从不离开 View ,所以每次都向上重新调整表格不是这种情况。

    如果有人可以帮助阐明一下,我很想了解发生了什么以及如何解决它。

    为了清楚起见再次更新 - 当我说“修复它”时,我的意思是让它看起来很好,当部件移动到位时没有明显的间隙。我什至不一定希望它动画化。滑入位置需要太长时间。但正如我上面提到的,关闭动画会使事情再次出现在错误的位置。

    上次更新了 - 我通过移除线条周围的动画 block 来移动搜索栏,让它看起来好多了。我想这在动画开始之前引入了暂停。现在已经足够好了,至少目前是这样。我仍然接受安德鲁的回答,因为他把我引向了正确的方向。

    最佳答案

    在 Mail.app 的情况下,看起来他们隐藏了 UINavigationBar,如下所示:

    [self.navigationController setNavigationBarHidden:YES animated:YES];

    然后使用 UIView 动画,他们增加搜索栏的大小以占用导航栏填充的空间。

    伪代码:
    [UIView beginAnimations:@"foo" context:NULL];
    [UIView setAnimationDuration:1.0f];
    CGRect newFrame = CGRectMake(0,0,self.view.frame.size.width, mySearchBar.frame.size.height);
    mySearchBar.frame = newFrame;
    //optionally, you could do something like this instead of setting a new frame
    // mySearchBar.frame = CGRectOffset(mySearchBar.frame, 0, -44);
    [UIView commitAnimations];

    这都将在 UISearchBarDelegate 方法中进行
    - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

    那么当用户取消搜索时,
    – searchBarCancelButtonClicked:

    您将反转动画,并再次显示导航栏。

    关于iphone - UISearchBar 的范围按钮覆盖了第一行结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514307/

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