2016-03-23 1 views
9

私は自分自身のUIをストーリーボードに作成しなければならないmyの共有拡張を作成しました。ナビゲーションバーがメインのアプリの外観を継承していることを除いて、すべての機能は素晴らしいです。例として:ShareエクステンションのUINavigationBarがメインのアプリケーションの外観設定を継承しないようにする

ここではNYTのアプリである: enter image description here

ここでは、副アプリである: enter image description here

私は自分の外観を設定できますか?

+0

、ここで説明したようにあなたが '' UINavigationBar'と 'UIToolbar'クラスの' UIAppearance' APIで静的メソッド '外観を()を使用しなければなりませんhttps://developer.apple.com/library/prerelease /0ios/documentation/UIKit/Reference/UIAppearance_Protocol/index.html –

答えて

0

他の回答で指摘されているように、既存のAPIでは単純に行うことはできません。私はUINavigationBarをサブクラス化し、tintColorbackgroundColorのようなものをオーバーライドしようとしましたが、それもうまくいきませんでした。

私が最後にやったのは、ナビゲーションバーのように見えるようにビューとスタイルを使用していました。うまくいきます。ちょっとハッキリですが、iOSの将来のリリースでは決して破られることはないので、まだOKです...

5

共有拡張は、メインアプリの優先スタイルを継承するためのものです。あなたの2つの例はこれを示しています。異なるスタイルの共有拡張子を持つアプリを思い出すことはできません。

このquestionには、Appleに提出されたrdarへのリンクを含め、この問題を解決するための徹底的な取り組みが含まれています。

あなたが望む答えではありませんが、これを達成する "非ハックな"方法はありません。

+1

デフォルトのShareExtensionコントローラ(SLServiceControllerと思う?)にはこの問題はありませんが、 – Quantaliinuxite

5

私がやることは、UINavigationBarをMYNavigationBarとしてサブクラス化して、MYNavigationBarにカスタム外観スタイルを適用することです。

私は、UINavigationBarの代わりにMYNavigationBarを使用しました(ストーリーボードのクラスタイプを変更するだけです)。

+0

悲しいことに、外観設定はクラスのサブクラスで受け継がれています。 – Quantaliinuxite

0

私は方法を見つけました!

あなたの色でイメージを描くだけです!

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) 
関連する問題