阻止Share Extension中的UINavigationBar继承主应用程序外观设置

时间:2016-03-23 09:40:49

标签: ios swift uinavigationbar

我为我创建了一个共享扩展,我必须在Storyboard中创建自己的UI。整个过程非常有效,除了导航栏继承了主应用程序的外观。例如:

这是在NYT应用程序中: enter image description here

这是在副应用中: enter image description here

如何设置自己的外观?

4 个答案:

答案 0 :(得分:5)

共享扩展程序旨在从主应用程序的首选样式继承。您的两个示例显示,我无法回想起具有不同风格的共享扩展程序的应用程序。

question包含彻底解决此问题的工作,包括指向Apple提交的rdar的链接。

不是你想要的答案,但似乎并没有达到这个目的的“非黑客”方式。

答案 1 :(得分:5)

我要做的是将UINavigationBar子类化为MYNavigationBar,然后将我的自定义外观样式应用于MYNavigationBar。

然后我在整个应用程序中使用MYNavigationBar而不是UINavigationBar(只是在故事板中更改类类型)。

答案 2 :(得分:0)

正如其他答案所指出的那样,现在的API无法完成。我尝试了对UINavigationBar进行子类化,甚至覆盖了诸如tintColorbackgroundColor之类的内容,但这也没有成功。

我最终做的是使用视图并将其设计为看起来像导航栏,它运行良好。它有点hacky,但它仍然可以,因为它很可能永远不会打破iOS的未来版本...

答案 3 :(得分:-1)

我找到了办法!

只需用您的颜色绘制图像!

func getTopWithColor(color: UIColor, size: CGSize) -> UIImage {
    let rect = CGRect(x: 0,y:  0,width: size.width,height: size.height)
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    color.setFill()
    UIRectFill(rect)
    //if let img = UIImage(named: "test.jpg") {
        //img.draw(in: CGRect(x: 0,y: 0,width: size.width,height: size.height))
    //    img.draw(in: CGRect(x: 0,y: 0,width: size.width,height: size.height), blendMode: .darken, alpha: 0.5)
    //}
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!

    UIGraphicsEndImageContext()
    return image
}

override func viewDidLoad() {

let c = UIColor(red: 0.5765, green: 0.2784, blue: 0, alpha: 0.5)
    //c.withAlphaComponent(CGFloat(0))
    self.navigationController?.navigationBar.tintColor = UIColor.black
    let navSize = self.navigationController?.navigationBar.frame.size
    let image1 = getTopWithColor(color: c, size: navSize!)

    self.navigationController?.navigationBar.setBackgroundImage(image1, for: .default)