当前位置: 首页 > 知识库问答 >
问题:

Swift 5自定义导航栏封面标题和按钮

鲁旭
2023-03-14

在寻求了很多,尝试了很多解决方案后,没有解决我的问题。在我的应用程序中,我自定义了UINavigationController以获得模糊效果:

类CustomNavigationController:UINavigationController{

override func viewDidLoad() {
    super.viewDidLoad()

    let visualEffectView   = UIVisualEffectView(effect: UIBlurEffect(style: .regular))
    visualEffectView.frame = (self.navigationBar.bounds.insetBy(dx: 0, dy: -40).offsetBy(dx: 0, dy: -40))
    self.navigationBar.isTranslucent = true
    self.navigationBar.setBackgroundImage(UIImage(), for: .default)
    self.navigationBar.addSubview(visualEffectView)
    self.navigationBar.sendSubviewToBack(visualEffectView)
}

}

然后,在Main.Storyboard中,我为导航控制器项选择了自定义类。

模糊效果工作正常,状态图标正确可见,但不是标准的导航栏项:左按钮,标题和右按钮。

它们会出现片刻,但在自定义导航栏覆盖它们之后不久。

我正在使用Xcode12.4并在iPhone XR上运行该应用程序。

如何再次显示导航栏元素?

提前多谢了。

共有1个答案

詹亮
2023-03-14

iOS中的半透明导航栏已经模糊了栏后的内容,因此您不需要添加UIVisualEffectView,也不需要设置BackgroundImage

如果将代码修改为:

override func viewDidLoad() 
{
    super.viewDidLoad()
    self.navigationBar.isTranslucent = true
}

这没有达到你所要的视觉效果吗?

如果没有,请尝试对您的方法进行以下调整:

override func viewDidLoad() 
{
    super.viewDidLoad()

    self.navigationBar.isTranslucent = true

    // create a UIImageView
    let backgroundImage: UIImageView = UIImageView()
    backgroundImage.autoresizingMask = [.flexibleWidth, .flexibleHeight]

    // add a blur effect to the ImageView
    let visualEffectView: UIVisualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .regular))
    visualEffectView.frame = (self.navigationBar.bounds.insetBy(dx: 0, dy: -40).offsetBy(dx: 0, dy: -40))
    backgroundImage.addSubview (visualEffectView)

    // and set that as your backgroundImage on the navigationBar
    self.navigationBar.setBackgroundImage(backgroundImage.image, for: .default)
}

这增加了背景图像的模糊效果。这似乎对我有用,但视觉效果与仅仅使用我的第一个建议没有什么不同,可能是因为backgroundimage.image==nil

这当然是一种改进的方法,因为它不会向UINavigationBar视图层次结构中添加意外的子视图,而且我注意到这两种方法都不会影响条控件的可见性。

 类似资料:
  • 问题内容: 我正在尝试在导航栏的中心添加自定义视图,并且正在使用以下代码对其进行测试: 我在视图控制器的viewDidLoad方法中进行设置,但是当我运行程序时,导航栏中似乎没有任何变化。 你能帮我吗? 问题答案: 这可行。初始化时给框架

  • 修改聊天页面导航栏背景色、导航栏上增加自定义按钮、修改导航栏上图标按钮颜色等 /** 聊天窗口导航栏 @param navigationBar 导航栏 */ - (void)ntalker_navigationBar:(UIView *)navigationBar { navigationBar.backgroundColor = [UIColor redColor];//修改导航栏背景色 }

  • Navbar 自定义导航栏 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 默认情况下,该组件只有向左的箭头,点击可以返回上一页,如果您想将自定义导航栏用在tabbar(不存在要返回的逻辑)页面,应该将is-back设置为false, 这样会隐藏左边的返回图标区域。 如果想在返回箭头的右边自定义类似"返回"字样,可以将

  • 问题内容: 我正在尝试在导航栏中设置标题标签以允许多行。我有将多行代码放入其中的自定义导航控制器代码。我知道该代码已经可以使用,但是我的多行部分无法使用。 但是文本仍然在结尾处消失。我还尝试将其放入单个视图控制器本身,并在其前面添加相同的结果。 我的代码中缺少某些东西可以防止标题标签使用多行吗? 问题答案: 这是如何创建多行navigationBar标题的代码示例 Swift 5.x:

  • 我正在尝试用PageView在Flutter中实现一个自定义的BottomNavigationBar,用于在同一支架中包含有状态小部件的不同页面之间滑动。 虽然我可以点击navbar并更改页面,但我无法在更改指示所选页面的icon_button的颜色的同时实现pageview滑动手势。我能够完美地使用BottomNavigationBarItem来完成此操作,但我想使用自定义设计。 包含不同Ico

  • 我只想在我的wordpress主题菜单栏中添加一个快捷键,用于处理功能。 我尝试了在菜单中使用“