栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在iOS 11的navigationBar中模仿大标题的UITableViewController显示

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在iOS 11的navigationBar中模仿大标题的UITableViewController显示

我注意到了

prefersLargeTitle
行为的另一方面,在某些情况下,它甚至可以提供更简单,更优雅的解决方案。在我的情况下,
viewController
不仅包含
tableView
(否则我将简单地使用它,
UITableViewController
并且将获得标准的
prefersLargeTitle
行为),还包含一些其他视图。现在,我注意到,如果将添加
tableView
作为的第一个子视图,则
viewController.view
该表将控制大标题功能:

// this will workfileprivate func setupInitialHierarchy() {    self.view.addSubview(tableView)    self.view.addSubview(logoffButton)}

在创建视图层次结构之前,如下所示:

// for some reason now the tableView will not control the large titlefileprivate func setupInitialHierarchy() {    self.view.addSubview(logoffButton)    self.view.addSubview(tableView)}

如此看来,如果

tableView
是第一子视图
viewController
小号
view
,我们得到标准的大标题的行为。

替代解决方案

但是,如果这不可能,那么我已经可以通过这种方式以编程方式模拟标准行为:

实现对的响应的委托方法,

tableView
以响应滚动,然后运行使用current的代码
contentOffset
以显示或隐藏大标题(
UITableView
继承自
UIScrollView
,因此
scrollView
在这种情况下,该参数引用
tableView
):

func scrollViewDidScroll(_ scrollView: UIScrollView) {    if scrollView.contentOffset.y <= 0 {        self.navigationItem.largeTitleDisplayMode = .always    } else {        self.navigationItem.largeTitleDisplayMode = .never    }    self.navigationController?.navigationBar.setNeedsLayout()    self.view.setNeedsLayout()    UIView.animate(withDuration: 0.25, animations: {        self.navigationController?.navigationBar.layoutIfNeeded()        self.view.layoutIfNeeded()    })}

只是要记住,它

scrollViewDidScroll
被反复调用,所以有些
guard
可能是可取的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371587.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号