Using AutoLayout programmatically for search bar and UITableView(以编程方式对搜索栏和 UITableView 使用 AutoLayout)
问题描述
我有一个几乎全屏的容器视图,没有状态栏.
然后我创建了一个 UISearchController 和一个 UITableView.我正在使用 ios 9 并以编程方式做事.我遇到的错误是当触摸搜索栏时,范围选项在其下方打开,但表格视图没有正确向下滑动.我该如何解决这个问题?
我 viewDidLoad 中的代码是:
//搜索控制器self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];self.searchController.searchResultsUpdater = 自我;self.searchController.dimsBackgroundDuringPresentation = NO;self.searchController.searchBar.scopeButtonTitles = @[@"A", @"B", @"C"];self.searchController.searchBar.delegate = self;[self.searchController.searchBar setTranslatesAutoresizingMaskIntoConstraints:NO];//UITableViewself.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];self.tableView.translatesAutoresizingMaskIntoConstraints = NO;//容器视图定义为整个屏幕,除了顶部20个点的状态栏[containerView addSubview:self.searchController.searchBar];[containerView addSubview:self.tableView];//约束 - 这里可能有问题?//搜索栏约束NSDictionary *views2 = @{@"searchBar": self.searchController.searchBar};[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[searchBar]|"选项:0 指标:nil 视图:views2]];[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[searchBar]|"选项:0 指标:nil 视图:views2]];//表格视图约束NSDictionary *views = @{@"tableView": self.tableView};[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[tableView]|"选项:0 指标:无意见:意见]];[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[tableView]|"选项:0 指标:无意见:意见]];
我需要让搜索栏范围选项和表格视图一起正确滑动.这是如何以编程方式完成的?
您想将 UITableView
的顶部附加到 顶部布局指南的底部.
顶部布局指南仅在使用 故事板时可供您使用.
使用 Interface Builder 的另一个理由.
<小时>原因 1 = 你一开始就不会有这个错误,你将能够可视化你的约束,你可以用恰好 0 行代码来实现所有这些.p>
我绝对肯定,只要付出适当的努力,并得到 SO 社区的支持,您就可以在代码中完成所有工作.我只是发现 IB 不仅节省了设计时间,而且将调试工作转移到了操作系统上,并确保任何应用程序的使用寿命更长.故事板让您可以专注于使您的应用与我的应用不同的地方,而不是为布局故障而苦恼.
I have a container view that is nearly the full screen sans the status bar.
I then created a UISearchController and a UITableView. I am using ios 9 and doing things programmatically. The bug I am having is when the search bar is touched, the scope options open beneath it but the tableview doesn't slide down correctly. How do I fix this?
The code in my viewDidLoad is:
// Search controller
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.searchBar.scopeButtonTitles = @[@"A", @"B", @"C"];
self.searchController.searchBar.delegate = self;
[self.searchController.searchBar setTranslatesAutoresizingMaskIntoConstraints:NO];
// UITableView
self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
self.tableView.translatesAutoresizingMaskIntoConstraints = NO;
// Container view is defined as the whole screen except 20 points at the top where the status bar is
[containerView addSubview:self.searchController.searchBar];
[containerView addSubview:self.tableView];
// The constraints - something is probably wrong here?
// Search bar constraints
NSDictionary *views2 = @{@"searchBar": self.searchController.searchBar};
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[searchBar]|" options:0 metrics:nil views:views2]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[searchBar]|" options:0 metrics:nil views:views2]];
// Tableview constraints
NSDictionary *views = @{@"tableView": self.tableView};
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[tableView]|" options:0 metrics:nil views:views]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[tableView]|" options:0 metrics:nil views:views]];
I need to make the search bar scope options and table view slide properly together. How is this done programmatically?
You want to attach the top of the UITableView
to the bottom of the top layout guide.
That top layout guide is only available to you when using a Storyboard.
One more reason to use Interface Builder.
Reason number 1 = you wouldn't have this bug in the first place, you would be able to visualize your constraints, and you could achieve all this with exactly 0 lines of code.
I'm absolutely certain that with the right amount of effort, and support from the SO Community, you can do everything in code. I just find that IB saves not only design time, but offloads debugging to the OS, and ensures longer lifespan to any app. Storyboard allows you to concentrate on what makes your app different from my app, instead of agonizing over layout glitches.
这篇关于以编程方式对搜索栏和 UITableView 使用 AutoLayout的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:以编程方式对搜索栏和 UITableView 使用 AutoLayout
基础教程推荐
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01