标签: uinavigationbarappearance

如何更改导航栏和后退按钮颜色 iOS 15

我有UIkit一个项目,我想更改导航栏颜色和后退按钮颜色。它在以前的版本上工作正常。但在 iOS 15 中则不然。我在上面添加了以下代码AppDelegate,它更改了标题颜色但不更改后退按钮项目颜色。如何修复它?

if #available(iOS 15.0, *) {
   let appearance = UINavigationBarAppearance()
   let navigationBar = UINavigationBar()
   appearance.configureWithOpaqueBackground()
   appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
   appearance.backgroundColor = .red
   navigationBar.tintColor = .white
   navigationBar.standardAppearance = appearance;
   UINavigationBar.appearance().scrollEdgeAppearance = appearance
}else{
   let navBarAppearnce = UINavigationBar.appearance()
   navBarAppearnce.tintColor = .white
   navBarAppearnce.barTintColor = .red
   navBarAppearnce.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
}
Run Code Online (Sandbox Code Playgroud)

输出

uinavigationbar uikit swift uinavigationbarappearance ios15

10
推荐指数
1
解决办法
1万
查看次数

在iOS 13中设置后退按钮箭头色调的正确方法是什么

在ios 13中,Apple引入了新的UINavigationBarAppearance代理对象来设置导航栏外观。除了一件小事情,我几乎可以设置所有我需要的东西。后退按钮的箭头始终显示为蓝色,我不知道如何将其设置为所需的颜色。我使用的是旧[[UINavigationBar appearance] setTintColor:]方法,但是我认为必须使用UINavigationBarAppearance对象API来实现。有人知道如何吗?

uinavigationbar ios13 uinavigationbarappearance

8
推荐指数
2
解决办法
249
查看次数

SwiftUI 在详细视图中覆盖导航栏外观

我有一个超级简单的 SwiftUI 主从应用程序:

import SwiftUI

struct ContentView: View {
    @State private var imageNames = [String]()

    var body: some View {
        NavigationView {
            MasterView(imageNames: $imageNames)
                .navigationBarTitle(Text("Master"))
                .navigationBarItems(
                    leading: EditButton(),
                    trailing: Button(
                        action: {
                            withAnimation {
                                // simplified for example
                                self.imageNames.insert("image", at: 0)
                            }
                        }
                    ) {
                        Image(systemName: "plus")
                    }
                )
        }
    }
}

struct MasterView: View {
    @Binding var imageNames: [String]

    var body: some View {
        List {
            ForEach(imageNames, id: \.self) { imageName in
                NavigationLink(
                    destination: DetailView(selectedImageName: imageName)
                ) {
                    Text(imageName) …
Run Code Online (Sandbox Code Playgroud)

swiftui uinavigationbarappearance swiftui-navigationlink

6
推荐指数
1
解决办法
1803
查看次数

在 iOS 15 上从不透明导航栏导航到具有透明导航栏的视图控制器

在 iOS 15 上,当导航到具有透明导航栏的视图控制器时,透明栏的动画无法按预期工作。

但是,如果您导航回带有透明导航栏的视图控制器,动画将按预期工作。

这就是我设置视图控制器的方式:

根VC

let appearance = UINavigationBarAppearance()
appearance.configureWithDefaultBackground()
appearance.backgroundColor = UIColor.red

self.navigationController?.navigationBar.standardAppearance = appearance
self.navigationController?.navigationBar.scrollEdgeAppearance = self.navigationController?.navigationBar.standardAppearance
Run Code Online (Sandbox Code Playgroud)

第一VC

let appearance = UINavigationBarAppearance()
appearance.configureWithTransparentBackground()

self.navigationController?.navigationBar.standardAppearance = appearance
self.navigationController?.navigationBar.scrollEdgeAppearance = self.navigationController?.navigationBar.standardAppearance
Run Code Online (Sandbox Code Playgroud)

第二VC

let appearance = UINavigationBarAppearance()
appearance.configureWithDefaultBackground()
appearance.backgroundColor = UIColor.yellow

self.navigationController?.navigationBar.standardAppearance = appearance
self.navigationController?.navigationBar.scrollEdgeAppearance = self.navigationController?.navigationBar.standardAppearance
Run Code Online (Sandbox Code Playgroud)

请注意以下示例中从secondaryVC -> firstVC的过渡是多么平滑,但不是从rootVC -> firstVC的过渡:

视频演示

示例项目: https: //github.com/karlingen/NavigationTest

有什么想法为什么会这样吗?

uinavigationbar uinavigationcontroller ios uinavigationbarappearance ios15

6
推荐指数
1
解决办法
1122
查看次数

iOS 15 中状态栏样式没有改变

我想根据屏幕内容更改状态栏样式。对于较暗的屏幕,状态栏内容应为白色。对于较浅的屏幕,状态栏内容应为黑色。

看来该问题仅发生在 iOS 15 设备上。

下面的屏幕截图比较了 iOS 15.2 和 iOS 14.5 上的相同用例

在此输入图像描述

正如您所看到的,即使导航栏样式设置为“黑色”,状态栏样式也是默认的

状态栏样式变化对比

class ViewAController: UIViewController {
 
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // setup views ...
    }
    
     // setting navigation bar style doesn't work iOS 15. Needed to set UINavigationAppearance()
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.barTintColor = .white
        self.navigationController?.navigationBar.barStyle = .default
        self.navigationController?.navigationBar.titleTextAttributes = [.font: UIFont.boldSystemFont(ofSize: 18), .foregroundColor: UIColor.black]
        
        if #available(iOS 15, *) {
            let appearance = UINavigationBarAppearance()
            appearance.configureWithOpaqueBackground()
            appearance.backgroundColor = .white
            appearance.shadowImage = UIImage()
            appearance.shadowColor = .clear
            
            appearance.titleTextAttributes …
Run Code Online (Sandbox Code Playgroud)

uikit uinavigationcontroller swift uinavigationbarappearance ios15

5
推荐指数
1
解决办法
1807
查看次数

iOS 13 导航栏大标题问题

我试图Title在 a 中显示一个大的Navigation bar,但背景清晰。向上滚动时,它将Navigation bar具有模糊效果。

在此处输入图片说明

在此处输入图片说明

这看起来是正确的,但是,在滚动时,动画似乎被破坏了。此外,过渡有时会卡住:

在此处输入图片说明

在此处输入图片说明

我的代码如下:

UINavigationController

override func viewDidLoad() {
   super.viewDidLoad()

   if #available(iOS 13.0, *) {

      self.navigationBar.prefersLargeTitles = true

      let style = UINavigationBarAppearance()
      style.configureWithDefaultBackground()

      style.titleTextAttributes = [.font: UIFont.systemFont(ofSize: 18)]

      self.navigationBar.standardAppearance = style
      self.navigationBar.compactAppearance = style


      //Configure Large Style
      let largeStyle = UINavigationBarAppearance()
      largeStyle.configureWithTransparentBackground()

      largeStyle.largeTitleTextAttributes = [.font: UIFont.systemFont(ofSize: 28)]

      self.navigationBar.scrollEdgeAppearance = largeStyle

   }
}
Run Code Online (Sandbox Code Playgroud)

UITableView是内部的UINavigationController。两者都是通过 segue 方式从故事板中提取的。

xcode uinavigationbar ios swift uinavigationbarappearance

3
推荐指数
1
解决办法
3779
查看次数

动态更改和更新 SwiftUI 中导航栏的颜色

我正在尝试更改NavigationBarSwiftUI 中的背景颜色,这是我使用以下代码完成的。但是,我还没有弄清楚如何动态更改和更新导航栏的背景颜色。

struct ContentView: View {
    @State var color: Color = .red
    
    init() {
        let navbarAppearance = UINavigationBarAppearance()
        navbarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
        navbarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
        navbarAppearance.backgroundColor = UIColor(color)
        UINavigationBar.appearance().standardAppearance = navbarAppearance
        UINavigationBar.appearance().compactAppearance = navbarAppearance
        UINavigationBar.appearance().scrollEdgeAppearance = navbarAppearance
        
    }
    
    var body: some View {
        NavigationView {
                VStack(spacing: 20) {
                    Button(action: { color = .blue }) {
                        Text("Blue")
                            .font(.title)
                            .bold()
                            .foregroundColor(.white)
                            .frame(width: 100)
                            .padding()
                            .background(Color.blue)
                            .cornerRadius(15)
                    }
                    Button(action: { color = .red }) {
                        Text("Red")
                            .font(.title)
                            .bold()
                            .foregroundColor(.white)
                            .frame(width: …
Run Code Online (Sandbox Code Playgroud)

uinavigationbar swift swiftui uinavigationbarappearance swiftui-navigationview

3
推荐指数
1
解决办法
2056
查看次数

由 Xcode 版本 13 构建的应用程序在 iOS 12 上崩溃

我的应用程序在 iOS 15 和 14 上运行良好,也许在 13 上也运行良好。但是,当我在使用 iOS 12 的旧设备上运行时,即使在触发 didFinishLaunchingWithOptions 之前,它也会在启动时崩溃。上次我使用 Xcode 12 构建时运行良好。

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named UINavigationBarAppearance because no class named UINavigationBarAppearance was found; the class needs to be defined in source code or linked in from a library (ensure the class is part of the correct target)' terminating with uncaught exception of type NSException

xcode ios12 uinavigationbarappearance ios15 xcode13

3
推荐指数
1
解决办法
815
查看次数

当导航栏为大标题时,不应用 barTintColor

我正在更新一个在 Xcode 10 上编译并在 iOS 13 上正常运行的应用程序。我想进行一些更改,因此在 Xcode 11 上重新编译,但现在 barTintColor 出现问题。

如果“大标题”设置为“始终”,则不会应用我的自定义 barTintColor - 我只会获得默认的灰色。如果“大标题”设置为“从不”,我的自定义 barTintColor 将按预期应用。如果“大标题”设置为“自动”,则显示大标题时导航栏默认为灰色,显示小标题时导航栏为我的自定义颜色。例如,当我的导航栏下方的TableView被向上推时,默认的大标题切换为小标题,并且我的导航栏改变颜色。正常行为是它始终是我的自定义颜色。

我的 ViewController 类中的相关代码,最后一行是设置 barTintColor 的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    setDelegates()
    setTableViewHeightForCollapsingHeaders()
    setNavigtionBarItems()
    doSplitViewManagement()
}


override func viewWillAppear(_ animated: Bool) {
    clearsSelectionOnViewWillAppear = splitViewController!.isCollapsed
    super.viewWillAppear(animated)
    updateUI()
}

fileprivate func setNavigtionBarItems() {
    //set up UI buttons
    navigationItem.leftBarButtonItem = editButtonItem
    let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(insertNewObject(_:)))
    navigationItem.rightBarButtonItem = addButton

    navigationController?.navigationBar.barTintColor = UIColor(hex: 0x5da0a2)

}
Run Code Online (Sandbox Code Playgroud)

知道行为发生变化的原因以及如何解决吗?

uinavigationbar ios swift uinavigationbarappearance

2
推荐指数
1
解决办法
4352
查看次数

如何在 iOS 13 中使用 UINavigationBarAppearance

你如何使用这个新对象来自定义 iOS 13 中的导航栏?我在 Objective-C 中尝试了以下代码,但无法正常工作。它仅在视图控制器被推送或弹出到导航堆栈时显示我的标题文本属性。

UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
appearance.titleTextAttributes = @{NSFontAttributeName: font};
Run Code Online (Sandbox Code Playgroud)

这是此对象的文档。 https://developer.apple.com/documentation/uikit/uinavigationbarappearance?language=objc

objective-c ios ios13 uinavigationbarappearance

1
推荐指数
1
解决办法
2574
查看次数