【问题标题】:UISearchBar changes self.view frameUISearchBar 改变 self.view 框架
【发布时间】:2014-07-05 12:06:29
【问题描述】:

我在导航栏正下方的屏幕上添加了UISearchBarUISearchDisplayController。当我点击UISearchBar 时,它会向上滑动以按预期替换导航栏。但是,它会使底层视图调整大小并显示一个间隙,如下所示:

这看起来像是一个范围栏的空间,但在 IB 中被禁用。

另外,当我在UISearchBar 被激活之前和之后记录self.view.frame 时,我看到self.view.frame 的位置和高度被修改了44pt:

{{0, 20}, {320, 548}}
{{0, 64}, {320, 504}} 

有什么办法可以解决这个问题吗?顺便说一句,这在 iOS6 中不会发生,只有 iOS7。

这是它在 iOS6 中的样子:

【问题讨论】:

  • 这可能是因为搜索时可以显示范围栏。确保使用 showsScopeBar 属性将其删除。
  • 正如我上面提到的,它在 IB 中是未选中的。我也尝试在代码中将其设置为 NO,但没有任何效果。这仅发生在 iOS7 上,iOS6 中没有假定的范围栏占位符

标签: ios ios7 uisearchbar


【解决方案1】:

尝试在viewDidLoad 中加入以下行来修复它。

    self.edgesForExtendedLayout = UIRectEdgeNone;

【讨论】:

  • 我已经这样做了(检查了 iOS7),这实际上解决了我遇到的 UISearchBar 爬上状态栏的另一个问题。但是,即使使用这条线,当前的问题仍然存在......
  • 好的,知道了。你想达到什么目标?搜索栏向上移动后,是否停止搜索栏移动到缩放视图的顶部?
  • 不,我希望视图从搜索栏底部开始(就像在 IOS6 中一样),它们之间没有黑色间隙
  • 自从如何解决这个问题后,您有什么想法吗?
【解决方案2】:

如果您尝试自定义 UISearchDisplayController 行为(特别是自定义 searchResultsTableView),iOS 7 上的行为似乎相当有问题。我不确定,但也许我遇到了一些类似的问题。

以下代码示例帮助了我:

- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {

    UITableView *searchTable = self.searchResults.searchResultsTableView;
    if (IS_IOS7 && searchTable.frame.origin.y != kSearchBarStartTopOffset) {
        [searchTable kSearchBarStartTopOffset];
        [searchTable setHeight:searchTable.height - kSearchBarStartTopOffset];
    }
}

kSearchBarStartTopOffset - 是其父视图框架内的起始搜索栏偏移量:

self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, kSearchBarStartTopOffset, 320, 44)];

希望对你有帮助,谢谢

【讨论】:

    【解决方案3】:

    我最终找到了导致UISearchBar 下方出现黑色条纹的原因。显然,这是scopeBar 的占位符,诀窍就在 Interface Builder 中:

    当您选中 UISearchBar 的“显示范围栏”选项时,Xcode 会自动为范围按钮标题添加 2 个占位符对象。但是,当您取消选中“显示范围栏”选项时,不会删除这些占位符。只要您在该框中有超过 1 个范围标题,UISearchBar 就会在其下方显示一个 scopeBar。所以我的解决方案是简单地手动删除这 2 个标题(只留下 1 个标题也删除了黑色条纹)。

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多