UITableView 标题中 UISearchBar 的布局在旋转后混乱

2023-12-12

我有一个UITableView搜索栏以编程方式插入到表格中headerView:

override func viewDidLoad() {

    super.viewDidLoad()
    resultSearchController = UISearchController(searchResultsController: nil)
    resultSearchController.searchResultsUpdater = self
    resultSearchController.dimsBackgroundDuringPresentation = false
    resultSearchController.searchBar.delegate = self
    resultSearchController.searchBar.placeholder = "Search Contacts"
    resultSearchController.searchBar.scopeButtonTitles = ["All", "Title1", "Title2", "Title3"]

    tableView.tableHeaderView = resultSearchController.searchBar
    resultSearchController.searchBar.sizeToFit()

    definesPresentationContext = true

    tableView.tableFooterView = UIView(frame: CGRectZero)

}`

该表是按标准设置的UINavigationController基于钻取 - 选择一行推送到详细视图控制器中。

纵向或横向时一切正常,但如果在显示时旋转细节视图,则在弹出详细视图后会崩溃。确切的顺序是:

  • 纵向打开表格,使用搜索栏过滤结果,然后选择其中一个结果推送到详细视图中
  • 在细节视图中,旋转至横向
  • 仍在详细视图中时,旋转回纵向

当表视图重新出现时,搜索栏的所有单独元素都已“折叠”在彼此之上,并且整个元素覆盖了状态栏:

collapsed search bar

我尝试过各种显式设置搜索栏框架的方法viewDidAppear,以及从标题视图中删除和替换它 - 但问题仍然存在。

我还注意到 Apple 示例代码也存在类似问题https://developer.apple.com/library/prerelease/ios/samplecode/TableSearch_UISearchController/Introduction/Intro.html :

apple code

有人为此想出了解决方法吗?

编辑添加:

进一步挖掘,问题似乎是导航栏在旋转后消失 - 这是之前的:

nav bar exists

之后:

enter image description here

那么,有什么想法吗?


注意到不活动后searchBar似乎没有这个问题,我已经成功地在视图消失时保存搜索栏状态并在视图重新出现之前恢复它。

示例代码经过以下更改后可以正常工作。保存状态:

- (void)viewDidDisappear:(BOOL)animated
{
    if (self.searchController.active && self.searchController.searchBar.text.length > 0) {
        self.savedSearch = self.searchController.searchBar.text;
        [self disableSearch];
    } else if (self.searchController.active) {
        // empty search field - this won't get restored
        [self disableSearch];
    }
    [super viewDidDisappear:animated];
}

- (void)disableSearch
{
    if (self.searchController.isActive) {
        self.searchController.searchBar.text = @"";
        self.searchController.active = NO;
    }
}

并恢复:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (self.savedSearch) {
        NSLog(@"RESTORED SEARCH");
        self.searchController.searchBar.text = self.savedSearch;
        self.searchController.searchBar.showsCancelButton = YES;
        self.searchController.active = YES;
        self.savedSearch = nil;
    }
}

这似乎工作正常,无论是否self.searchController.hidesNavigationBarDuringPresentation已设置(尽管如果true返回视图时有一些动画)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITableView 标题中 UISearchBar 的布局在旋转后混乱 的相关文章

随机推荐

  • 以编程方式设置 Android IP、DNS、GATEWAY 设置

    如何从 android java 设置 wifi ip 地址 dns 地址 网关 即以编程方式设置 我没有找到任何能够存储这些值的方法 您可以通过编程方式更改系统设置 首先 您需要在 AndroidManifest xml 中请求 WRIT
  • 捕获 iframe 的屏幕截图 - html2canvas 不起作用

    我有以下 iframe 我只是想捕获 iframe 内容的屏幕截图 我已经尝试过 html2canvas 但它似乎不起作用 我尝试过将 iframe 放入 div 中 但没有任何乐趣 我见过使用 php 实现此目的的各种方法 但似乎没有什么
  • 用多字符字符串替换字符

    我正在尝试替换德语和荷兰语变音符号 例如 or 它们应该写成ae代替 所以我不能简单地将一个字符翻译成另一个字符 有没有更优雅的方法来做到这一点 实际上它看起来像这样 尚未完成 SELECT addr REPLACE REPLACE add
  • Android:如何获取文件的创建日期?

    这是我的代码 File TempFiles new File Tempfilepath if TempFiles exists String child TempFiles list for int i 0 i lt child lengt
  • git分支可以用数字列出吗?

    我想知道是否有人构建了一个脚本或有办法列出带有数字的 git 分支 以便代替这个 最好在 bash 中 feature myusername ID 1111 my branch name feature myusername ID 2222
  • django:控制json序列化

    有没有办法在django中控制json序列化 下面的简单代码将返回 json 中的序列化对象 co Collection objects all c serializers serialize json co json 将类似于以下内容 p
  • Git 中的子模块、子树或其他依赖项?

    我有一个较大的项目 其中有很多模块 库及其各自的存储库 这些模块中的大多数是其他模块的依赖项 而不是项目的依赖项 现在已经到了主项目有多个子项目并且许多模块被共享的地步 有些依赖关系的深度超过 3 4 层 我读过可以在项目内部更新 拉取子模
  • 调用 async fns 时创建值流?

    我不知道如何提供Stream我在哪里await异步函数来获取流值所需的数据 我尝试过实施Stream直接使用特质 但我遇到了问题 因为我想使用异步的东西 比如awaiting 编译器不希望我调用异步函数 我认为我缺少一些关于目标的背景知识S
  • 使用 Apache (.htaccess) 将 WWW 转换为非 WWW URL(删除 WWW)

    我必须将我的网站从https www example com to https website com SSL已正确安装在我的服务器上 我在用Apache并且必须使用来做到这一点Apache 任何一个httpd conf ssl conf
  • 如何使用Python的pip下载并保存包的压缩文件?

    如果我想使用pip命令下载包 及其依赖项 但是keep下载的所有压缩文件 例如 django socialregistration tar gz 有办法做到这一点吗 我尝试过各种命令行选项 但它似乎总是解压并deletezipfile 或者
  • cocoapods - “pod 安装”需要很长时间

    我试图用以下命令更新现有的 Podpod install命令 但需要永远运行 详细模式显示它卡在下一行 永远 更新规范存储库master usr bin git pull no rebase no commit 卡住后没有网络活动 我遇到了
  • AppWidgetProvider问题

    我有一个 AppWidgetProvider 当小部件首次添加到主屏幕时 我需要进行一些初始化 据我所知 执行此操作的位置是在 onEnabled Context context 方法中 我的问题是这个方法永远不会被调用 据我在 logca
  • C++ 库包含

    我对 C 比较陌生 第一次需要使用库 我希望有人能够向我展示如何正确地 链接到 包含 该库 我想使用的库是 ID3 v3 8 8 可以在这里找到 http id3lib sourceforge net 我已经下载了 Windows 二进制文
  • Java SystemV 时区和 JodaTime

    我正在使用 Joda Time 在 Java 应用程序中处理时区 我在尝试从 java 时区的 id 构建 DateTimeZone Joda Time 对象时遇到问题 乔达扔出一个 java lang IllegalArgumentExc
  • 将 UTC 日期时间全局转换为用户指定的本地日期时间

    我将所有 DateTime 字段存储为 UTC 时间 当用户请求网页时 我想采用他的首选本地时区 而不是服务器计算机的本地时区 并自动将所有 Web 表单中的所有日期时间字段显示为本地日期 当然 我可以在每种表单中的每个 DateTime
  • 具有特定产品标签的 WooCommerce 产品的批量动态定价

    我正在尝试为所有具有标签的产品添加动态折扣 批量折扣 我希望如果客户购买例如 就会发生折扣 5 个带有标签的相似或不同产品 我正在与this代码 和this回答 这就是我所拥有的 add action woocommerce before
  • Android Gingerbread 之后 Async Task 到底发生了什么变化?

    Android 2 3 之后 Android 团队在异步任务中真正做了哪些改变 当我执行以下代码时 我在 Android 2 3 和 3 0 中得到相同的结果 package com sample asynctask import andr
  • 如何检查 Sitecore 项目是否使用别名

    目前 Sitecore 中的 别名 会生成指向同一内容项的多个路由 这在某些情况下可能会对 SEO 产生负面影响 我正在寻找一种方法来以编程方式检查当前页面 项目 URL 请求是否使用别名 我希望会有类似的东西 Sitecore Web W
  • 选择至少在所需列之一中具有非 NA 值的行

    我有这段代码可以正常工作 CompleteCoxObs lt temp is na temp 8 FALSE is na temp 9 FALSE is na temp 10 FALSE 什么是更好 更有效的方法来达到相同的结果 您可以尝试
  • UITableView 标题中 UISearchBar 的布局在旋转后混乱

    我有一个UITableView搜索栏以编程方式插入到表格中headerView override func viewDidLoad super viewDidLoad resultSearchController UISearchContr