Tag: 导航栏

独立导航栏

声明导航栏的独立性 大多数情况下,我们使用UINavigationBar附带的UINavigationBar 。 在这种情况下,导航控制器将创建强大的条形图并将其显示,并且我们可以随时使用导航控制器对象访问实际的条形实例。 导航控制器还将自己设置为关联导航栏的委托。 但是,如何管理所有这些导航内容呢? 实际上,它具有相当合理的机制。 UINavigationBar包含用于显示内容的UINavigationItem数组。 根据Apple文件,UINavigationItem 手段; 当关联的视图控制器可见时,将由导航栏显示的项目。 例如,每当您将视图控制器推入导航控制器堆栈时,导航控制器都会获取即将到来的视图控制器的导航项,并将其推入导航栏的导航项数组。 另外,如果您从导航堆栈中弹出当前视图控制器,其导航项也会从导航栏的导航项数组中弹出。 如果要在其上方显示的导航栏上进行更改,则应处理视图控制器的导航项。 从Apple文档中获取的数据可以使您更清楚地了解这些内容。 当然,由于有了导航控制器,所有这些东西大多数时候都会在后台自动运行。 实际上,为了澄清谁可以控制上述导航栏,如果您问谁是导航栏的主角,答案肯定是UINavigationController 。 但是 ,可能有时候我们想打破这种纽带。 您可以认为它是没有必要的,甚至您可能也认为应该避免使用它,因为它是默认行为。 但是,让我们看一下我在现实世界中遇到的问题的简化版本; 您可以看到使用交互式弹出手势时导航栏正在褪色。 实际上,我认为它看起来很酷,但是这可能是不受欢迎的行为,尤其是您的产品经理期望您从屏幕顶部到底部的可靠过渡。 在这种情况下,我们应该使用独立的导航栏。

Swift-适用于iOS 11大标题的自定义导航栏图像🎨

标准的iOS组件可能会很无聊……幸运的是,有了Swift,自定义随处可见! 本文将演示如何在导航栏中使用自定义图像,同时仍保留导航控制器中提供的所有功能。 🚀 TL; DR :使用少量代码清除导航控制器提供的默认导航栏图像,并将其约束在视图的顶部,前导和尾随锚点上,以将其放置在适当的位置(请确保不要约束到安全区域) 。 您可能需要手动创建可能是您要记住的自定义导航栏标题。 有很多方法可以做到这一点,但最简单的方法就是使用Sketch。 使用矢量工具,我能够在几分钟内创建出我想要的设计。 这里的尺寸并不重要,因为Sketch默认具有出色的导出预设(iOS预设提供标准的Xcode要求的@ 2x和@ 3x大小)。 假设您已经在导航控制器中嵌入了视图控制器,则下一步是从提供的默认标题图像中剥离导航栏。 这相当简单,可以用几行代码来完成。 这是我用来执行此操作的功能; 请注意-我将其用作重用的struct ,但这是可选的。 既然导航栏已经清晰了,我们就可以提供自己的图像了。 出于本文的目的,我将使用界面生成器来完成此操作。 这就像将UIImageView拖到视图控制器上,提供适当的图像并设置约束一样简单。 为了设置约束以使iPhone X不会裁剪图像,我们需要约束imageView的顶部锚点以view的顶部锚点(而不是安全区域)。 在我的情况下,将约束设置为0在边缘沿边缘留一个小间隙,因此值-2应该可以解决该问题。 当然,高度限制将根据所使用的图像而变化。 并且,由于我的图像较暗,因此我还将大标题文本的颜色设置为白色,并将状态栏设置为.lightContent 。 此时,自定义标头应按预期工作 您可能会注意到标题图像在iPhone X上看起来不错,但在其他任何设备上看起来都太大了。 这是因为view的顶部锚点和X上的view的顶部安全区域锚点之间存在间隙。幸运的是,可以通过IBOutlet引用轻松地调整图像的高度,以参考图像视图的高度约束。 完整的设备尺寸可在此处找到。 将此代码放在同一区域,我们清除导航栏默认图像: 您可能还会注意到,将设备旋转到横向时,标题图像的高度过高。 这可以通过视图控制器中提供的willTransform(to:with)方法轻松处理。 我没有在示例中包含它,但这也可以在导航栏中添加栏按钮项。 而已! 您的自定义导航栏图像现在应该可以正常工作work 随时在Twitter和Github上关注我,以获得更多类似this‍👨🏻的内容

小斯威夫特问题

在使用UISearchController的导航栏中实现UISearchBar时,您需要进行以下设置: navigationItem.searchController = searchController 当搜索栏为空时,您可能无法显示结果表视图(例如,您可能希望显示最近的搜索) 您尝试了一切,包括: self.searchController?.searchResultsController?.view.isHidden = false 在UISearchControllerDelegate和UISearchBarDelegate方法中: willPresentSearchController,didPresentSearchController和textDidChange,searchBarTextDidBeginEditing。 但是仍然无法正常工作! 解: 在viewDidAppear中设置searchController.isActive = true 注意:但是,如果要通过以下设置将搜索栏放置在导航项的标题视图中: navigationItem.titleView = searchController.searchBar 你可以设定 在viewWillAppear中的 searchController.isActive = true