iOS 8 Swift Xcode 6-机顶盒导航条背景颜色和高度

iOS 8 Swift Xcode 6-机顶盒导航条背景颜色和高度,xcode,swift,ios8,navbar,Xcode,Swift,Ios8,Navbar,我到处都找遍了,测试了堆栈上发布的所有代码片段,但没有任何东西适合我,因为我需要它来工作 我只想设定: 导航条高度 导航条背景颜色(RGB) 导航条居中标志 我正在使用iOS8、Xcode 6和Swift 非常感谢您的明确回答 这是我在ViewController.swift中的代码 // Set nav bar height navigationController?.navigationBar.frame.origin.y = -10 // Set nav bar b

我到处都找遍了,测试了堆栈上发布的所有代码片段,但没有任何东西适合我,因为我需要它来工作

我只想设定:

  • 导航条高度
  • 导航条背景颜色(RGB)
  • 导航条居中标志
我正在使用iOS8、Xcode 6和Swift

非常感谢您的明确回答

这是我在ViewController.swift中的代码

// Set nav bar height

    navigationController?.navigationBar.frame.origin.y = -10

    // Set nav bar bg color

    var navBarColor = UIColor(red: 4 / 255, green: 47 / 255, blue: 66 / 255, alpha: 1)

    navigationController?.navigationBar.barTintColor = navBarColor

    // Set nav bar logo

    let navBarImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))

    navBarImageView.contentMode = .ScaleAspectFit

    let navBarImage = UIImage(named: "navBarLogo.png")

    navBarImageView.image = navBarImage

    navigationItem.titleView = navBarImageView
导航条高度:

在自定义导航控制器子类中

func viewDidLoad() {
    super.viewDidLoad()

    navigationBar.barTintColor = // YOUR COLOR
}
这个方法的诀窍是不改变导航栏的实际高度,而是调整其原点

func viewDidLoad() {
    super.viewDidLoad()

    navigationBar.frame.origin.y = -10 
}
导航条背景颜色(RGB):

在自定义导航控制器子类中

func viewDidLoad() {
    super.viewDidLoad()

    navigationBar.barTintColor = // YOUR COLOR
}
或者使用外观代理

UINavigationBar.appearance().barTintColor = // YOUR COLOR
导航条居中标志

在自定义视图控制器中

func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.titleView = UIImageView(image: // YOUR LOGO)
}

在接受的答案中应用代码后,高度似乎没有任何变化

这不是一件容易的工作……我在网上调查了几篇文章(大部分都是Objective-C)

最有用的是:

<> p>但是它的最终解决方案不把项目放在中间,它不是在SWIFT。< /P> 因此,我在Swift中提出了一个可行的版本。希望它能帮助一些人,因为我节省了这么多宝贵的时间

Swift中的解决方案:

以下代码将解决您可能遇到的一些问题:

    <> >标题和条目未放置在导航栏的中间
  • 当用户在视图控制器之间导航时,标题和项目将闪烁
您需要首先对UINavigationBar进行子类化,并在情节提要中选择导航栏元素,然后在的“身份检查器”选项卡中,将新类设置为自定义类

import UIKit

class UINavigationBarTaller: UINavigationBar {
    ///The height you want your navigation bar to be of
    static let navigationBarHeight: CGFloat = 64

    ///The difference between new height and default height
    static let heightIncrease:CGFloat = navigationBarHeight - 44

    override init(frame: CGRect) {
        super.init(frame: frame)
        initialize()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        initialize()
    }

    private func initialize() {
        let shift = UINavigationBarTaller.heightIncrease/2

        ///Transform all view to shift upward for [shift] point
        self.transform =
            CGAffineTransformMakeTranslation(0, -shift)
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        let shift = UINavigationBarTaller.heightIncrease/2

        ///Move the background down for [shift] point
        let classNamesToReposition: [String] = ["_UINavigationBarBackground"]
        for view: UIView in self.subviews {
            if classNamesToReposition.contains(NSStringFromClass(view.dynamicType)) {
                let bounds: CGRect = self.bounds
                var frame: CGRect = view.frame
                frame.origin.y = bounds.origin.y + shift - 20.0
                frame.size.height = bounds.size.height + 20.0
                view.frame = frame
            }
        }
    }

    override func sizeThatFits(size: CGSize) -> CGSize {
        let amendedSize:CGSize = super.sizeThatFits(size)
        let newSize:CGSize = CGSizeMake(amendedSize.width, UINavigationBarTaller.navigationBarHeight);
        return newSize;
    }
} 
关于我的要点:

iOS 10更新:

不幸的是,此代码在iOS 10中被破坏,有人帮助修复它,给你:


而且要明确的是,这段代码有点黑,因为它取决于导航栏的内部结构……因此,如果您决定无论如何都要使用它,请为可能破坏这段代码的任何即将发生的更改做好准备……

来自Bon Bon的好答案

但在Swift 3中,请确保更换

let classNamesToReposition: [String] = ["_UINavigationBarBackground"]


否则,它将无法工作。

太棒了!我将尝试此=)如果您仍有任何问题,请告诉我:)此操作不可靠。查看链接了解原因。您需要创建子类。不要调用navBar.titleView,而是将其更改为navigationItem.titleView,对于更改帧,请调用navigationController.navigationBar.frame…..确保为imageView设置了一个图像,否则看起来什么都没有发生!谢谢现在颜色和背景图像都正常了,但我似乎无法为导航栏设置自定义高度?请参阅更新的代码。难以置信。干得好!关于如何在导航栏的中心添加图像作为徽标,有什么想法吗?或者文本?Ps,请解释一下为什么要使用所有的初始化函数?这将向上转换导航栏的所有坐标以获得[shift]点(CGAffineTransformMakeTransform中有两个参数,第一个用于x,第二个用于Y),用于在导航栏中添加徽标,请看本教程:在模式转换期间,它会有一点跳跃,仍然是非常好的回答谢谢更新!还有一篇文章提供了完整的代码示例。我更新了我原来的帖子,干杯