我一直在阅读很多关于iOS7 UI过渡的内容.
我不能够得到什么这三个属性automaticallyAdjustsScrollViewInsets,extendedLayoutIncludesOpaqueBars,edgesForExtendedLayout?
例如,我试图让我的视图控制器从状态栏下面开始,但我无法实现它.
我有一个UISearchController与UITableViewController作为searchResultsController,在UISearchBar这个searchController设置是在tableHeaderView我目前的tableView在我的根视图控制器显示.正如预期的那样,几乎所有东西都运作良好.但是在动画中UISearchBar(当我点击searchBar和UINavigationBar隐藏并且searchBar到达顶部时,如同UISearchDisplayController)我有一个奇怪的行为.它不会移动到UINavigationBar(y:0)的位置,而是跳出屏幕而不是启动显示取消按钮的动画.我尝试将我的实例化代码移动到viewDidLoad而不是init,事情就是一样的.我认为问题的核心在于searchResultsController视图的框架,但我不确定(我尝试设置框架,但没有成功).我正在做的一切都是纯粹的代码.
以下是代码的相关部分:
- (void) viewDidLoad {
[super viewDidLoad];
// search controller setup
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];
self.searchController.delegate = self;
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.delegate = self;
[self.searchController.searchBar sizeToFit];
self.tableView.tableHeaderView = self.searchController.searchBar;
self.searchController.definesPresentationContext = YES;
}
Run Code Online (Sandbox Code Playgroud)
我有一个懒惰的负载searchResultsController:
- (UITableViewController *)searchResultsController {
if (_searchResultsController == nil) {
_searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain]; …Run Code Online (Sandbox Code Playgroud) 我正在构建一个仅限iOS 7的应用程序.我正在尝试将UISearchDisplayController设置到导航栏中.
我设置如下:在故事板中,我在视图控制器的视图中添加了"搜索栏和搜索显示控制器",并将其设置为(0,0)相对于顶部布局指南.我设置约束来固定左,上,右.(我玩限制,我完全删除它们,没关系)最重要的是我有我的表视图.当我将搜索栏添加到故事板中的视图时,它会自动为searchDisplayController和searchBar委托设置插座.在代码我self.searchDisplayController.displaysSearchBarInNavigationBar = YES;有两个问题:
1)没有为搜索栏显示任何按钮(界面构建器 - >选择搜索栏 - >选项:未选中),搜索栏位于屏幕中间:

如果我点击导航栏,它会开始编辑搜索栏:

另请注意,暗覆盖图似乎偏离导航栏.在我看来,空间与导航栏的高度相同.就像它已经被那么多下降了.此外,当它显示搜索结果时,内容视图的顶部向下移动相同的量(更多图片跟随),这带来了第二个问题.
2)我搞砸了一会儿,决定检查选项,让它显示取消按钮.现在我已正确嵌入导航栏中的搜索栏,但叠加层仍然向下移动:

同样,当搜索结果表视图出现时,它会向下移动相同的数量(请注意右侧的滚动条):

更奇怪的是,我在搜索显示控制器的tableview图层上设置了一个边框,看起来是正确的:

我之前从未使用过UISearchDisplayController而且我不熟悉如何设置它,但功能上它工作正常.我已经阅读了一些其他类似的帖子,但唯一的建议是通过调整帧和设置手动偏移来破解它.我更想知道造成这种情况的原因,这是一个错误吗?我做错了什么?如果这是一个错误,我可以等待修复.这似乎是一个基本的东西,千人一定没有任何问题,所以我觉得我不是以某种方式正确设置它.谢谢你的输入.
interface-builder uitableview uisearchdisplaycontroller ios7
在我的UITableView中,我有一个tableHeaderView,它应该根据内容调整自己的大小.调整大小很好,但是,tableHeaderView模糊了前几个单元格.显然更改tableHeaderView的框架不会重新组织视图的其余部分.
我已经打过电话[self.tableView layoutSubViews]和[self.tableView setNeedsLayout],但那些没有任何帮助.还尝试从Interface Builder中提供tableHeaderView一个插座来更改其上的框架,但这也不会重新组织tableView.
如何在不隐藏任何单元格的情况下更改tableHeaderView的大小,重新组织tableView的其余部分?
我有一个UITableViewController包含a UISearchDisplayController和UISearchBar标准方式的T (在nib中定义的所有内容).然后由一些其他视图控制器以标准方式将T包含为子视图控制器.
搜索栏正确显示:

但当我点击搜索栏实际搜索时,搜索栏会变得更高,搜索栏内的内容会下降大约20像素(呃,状态栏的高度?巧合?)就像这样:

那是怎么回事?太高了.此外,使它看起来像这样的动画是笨拙的.有什么方法可以防止这种难看的增长?
我已经实现了UISearchController,它工作得很好,除了......
当我单击搜索栏时,导航栏会按预期消失.当我将手机旋转到横向视图时,我得到了这个有意义的视图.

但是,当我将手机旋转回纵向视图(仍然在搜索类型区域中选择)时,我得到以下视图.

您可以看到导航栏永远不会再出现.我觉得我正在实现一个基本的搜索控制器.什么可能导致这个?
self.venueSearchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.venueSearchController.searchResultsUpdater = self;
self.venueSearchController.searchBar.delegate = self;
self.venueSearchController.dimsBackgroundDuringPresentation = NO;
self.venueSearchController.hidesNavigationBarDuringPresentation = YES;
self.venueSearchController.searchBar.frame = CGRectMake(self.venueSearchController.searchBar.frame.origin.x, self.venueSearchController.searchBar.frame.origin.y, self.venueSearchController.searchBar.frame.size.width, 44.0);
self.definesPresentationContext = YES;
self.navigationController.navigationBar.translucent = YES;
self.venueSearchController.searchBar.translucent = YES;
self.tableView.tableHeaderView = self.venueSearchController.searchBar;
Run Code Online (Sandbox Code Playgroud) 搜索栏正好显示为64点太低:
所有其他帧都完全正确.
编辑: - 这UISearchController是错误的观点origin.y.它设置为64,当它应该为0.如果我添加此方法:
- (void)didPresentSearchController:(UISearchController *)searchController
{
[super didPresentSearchController:searchController];
searchController.view.frame = CGRectMake(0, 0, searchController.view.frame.size.width, searchController.view.frame.size.height);
}
Run Code Online (Sandbox Code Playgroud)
然后视图对齐.然而,它的janky因为它跳跃.如果我在willPresentSearchController其中修改框架不起作用,因为控制器必须在其呈现后进行某种布局.
如果我使用SparkInspector,并编辑UISearchBarContainerViewfrom origin 64 的框架(它设置为0,为0),问题就解决了.
这是我的相关配置:
self.searchResultsController = [[GMSearchTableViewController alloc] init];
self.definesPresentationContext = YES;
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];
self.searchController.dimsBackgroundDuringPresentation = YES;
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.searchController.searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44);
[self.view addSubview:self.searchController.searchBar];
Run Code Online (Sandbox Code Playgroud)
我没有使用Interface Builder,一切都是在代码中配置的.我很肯定,设置definesPresentationContext是正确的.
VC位于一个常规的UINavigationController,它位于SplitViewController内部(但iPhone上也存在问题).
我觉得我错过了一个简单的配置选项 UINavigationBar
我还有一个不同的控制器,它使用一个更复杂的自定义容器视图控制器模型,并且可以使用.
当我设置
self.definesPresentationContext = NO;
Run Code Online (Sandbox Code Playgroud)
所以现在UISearchBar获取正确,但是表示上下文是错误的,导致UISearchController表视图占据整个视图.
我UISearchController用来在我的tableview中搜索数据.我没有使用表视图控制器.我想在搜索栏处于活动状态时隐藏导航栏,因此我设置self.searchController.hidesNavigationBarDuringPresentation = YES;为yes.
但是当我这样做并想要搜索时,我的主动搜索栏会覆盖第一个单元格的一部分.被覆盖的部分与状态栏具有相同的高度.
我尝试了与此类似的其他文章和问题,但没有任何帮助我解决它.然后我开始玩表视图标题大小.我这样做了
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 20.0f;
}
Run Code Online (Sandbox Code Playgroud)
结果是当我点击搜索栏时,开始搜索问题就不再存在了.
但是,当搜索栏未激活时,搜索栏和第一个单元格之间存在混淆
有任何想法如何解决这个问题?
编辑:添加后 self.automaticallyAdjustsScrollViewInsets = false;
ios ×5
objective-c ×4
uisearchbar ×4
uitableview ×4
ios7 ×2
iphone ×2
frame ×1
layout ×1
xcode ×1