gpt4 book ai didi

ios - 将 UISearchBar 添加到 UITableView

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:18 26 4
gpt4 key购买 nike

背景: 我有一个 UIViewController,它以编程方式添加了一个 UITableView。在 UITableView 的顶部,我有一个 tablHeaderView,我在其中放置了一个 UIView。这个 UIView 有一个 UISearchBar 和一个 segmentedControl。这个想法是:用户可以按一些基本类别(例如“日期/时间”或“位置”等)对 UITableView 进行排序。他们还可以按程序中的项目进行搜索。

问题:当我点击搜索栏时它会调整大小(这是我不想要的),然后当我取消搜索时它会再次调整大小并停留在那里直到 UIViewController 退出并再次加载。

Screenshot with first screen looking ok, but when you tap into the search bar it resizes and looks odd.  You then cancel the search to get rid of it and it resizes again, taking up all of the tableHeaderView

代码:

-(void)loadTableView
{
usableSpace = [[UIScreen mainScreen] applicationFrame];
usableWidth = usableSpace.size.width;
usableHeight = usableSpace.size.height;

_tableView = [[UITableView alloc] init];
[_tableView setFrame:CGRectMake(0,0,usableWidth, usableHeight)];
[_tableView setDataSource:self];
[_tableView setDelegate:self];
[self.view addSubview:_tableView];

_searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, usableWidth, 44)];
_searchBar.showsCancelButton = YES;

NSLog(@"searchBar height = %fl", _searchBar.frame.size.height);
segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Date/Time", @"Location", @"Speaker", nil]];
segmentedControl.frame = CGRectMake(0, (_searchBar.frame.size.height), usableWidth, (usableHeight * 0.075));
[segmentedControl addTarget:self action:@selector(sortList) forControlEvents:UIControlEventValueChanged];

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self];
searchDisplayController.delegate = self;
searchDisplayController.searchResultsDataSource = self;
searchDisplayController.searchResultsDelegate = self;

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, usableWidth, (usableHeight * 0.15))];
[headerView addSubview:_searchBar];
[headerView addSubview:segmentedControl];
_tableView.tableHeaderView = headerView;

[self.view addSubview:_tableView];
self.tableView = _tableView;

}

我尝试了什么:我尝试设置 SearchBar 的大小,而不是设置它的大小。没有将它放在 tableHeaderView 的 UIView 中,而是将它单独放在那儿。

为什么它会调整大小,我怎样才能让它停止?

编辑: 我刚刚尝试了以下操作:在 Storyboard(最初创建 UIViewController 的地方)中,我选择了有问题的 UIVC,在属性检查器中,我取消选择了“Under Top Bars”和“Under Bottom Bars',这似乎已经解决了动画问题的第一部分。现在,当我点击搜索栏时,搜索将变为事件状态,但搜索栏不会调整大小。但是,当我取消 searchBar 时,searchBar 仍会根据屏幕截图中的最后一张图片进行动画处理和调整大小。什么可能导致调整大小?

最佳答案

我已经在这个问题上苦苦思索了太久了...支持this dude here for the clues .

如果您希望您的 UISearchBar 与其他 View 一起位于页眉中并随页眉滚动而不是停留在顶部,那么您必须删除它并在搜索完成后重新添加它。明确地说,像你已经做的那样构建你的标题,然后把它也扔在那里来处理古怪的动画。

-(void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
[self.mySearchBar removeFromSuperview];
self.mySearchBar.frame = CGRectMake(0, 0, 320, 44);
[self.table.tableHeaderView addSubview:self.mySearchBar];
}

正如 Timothy Moose 所说 here , “似乎 UISearchDisplayController 做了一个未记录的假设,即搜索栏是标题 View 的唯一内容”

...耶苹果。

关于ios - 将 UISearchBar 添加到 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22064018/

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