私は自分自身のUIをストーリーボードに作成しなければならないmyの共有拡張を作成しました。ナビゲーションバーがメインのアプリの外観を継承していることを除いて、すべての機能は素晴らしいです。例として:ShareエクステンションのUINavigationBarがメインのアプリケーションの外観設定を継承しないようにする
私は自分の外観を設定できますか?
私は自分自身のUIをストーリーボードに作成しなければならないmyの共有拡張を作成しました。ナビゲーションバーがメインのアプリの外観を継承していることを除いて、すべての機能は素晴らしいです。例として:ShareエクステンションのUINavigationBarがメインのアプリケーションの外観設定を継承しないようにする
私は自分の外観を設定できますか?
他の回答で指摘されているように、既存のAPIでは単純に行うことはできません。私はUINavigationBar
をサブクラス化し、tintColor
とbackgroundColor
のようなものをオーバーライドしようとしましたが、それもうまくいきませんでした。
私が最後にやったのは、ナビゲーションバーのように見えるようにビューとスタイルを使用していました。うまくいきます。ちょっとハッキリですが、iOSの将来のリリースでは決して破られることはないので、まだOKです...
共有拡張は、メインアプリの優先スタイルを継承するためのものです。あなたの2つの例はこれを示しています。異なるスタイルの共有拡張子を持つアプリを思い出すことはできません。
このquestionには、Appleに提出されたrdarへのリンクを含め、この問題を解決するための徹底的な取り組みが含まれています。
あなたが望む答えではありませんが、これを達成する "非ハックな"方法はありません。
デフォルトのShareExtensionコントローラ(SLServiceControllerと思う?)にはこの問題はありませんが、 – Quantaliinuxite
私がやることは、UINavigationBarをMYNavigationBarとしてサブクラス化して、MYNavigationBarにカスタム外観スタイルを適用することです。
私は、UINavigationBarの代わりにMYNavigationBarを使用しました(ストーリーボードのクラスタイプを変更するだけです)。
悲しいことに、外観設定はクラスのサブクラスで受け継がれています。 – Quantaliinuxite
私は方法を見つけました!
あなたの色でイメージを描くだけです!
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)
、ここで説明したようにあなたが '' UINavigationBar'と 'UIToolbar'クラスの' UIAppearance' APIで静的メソッド '外観を()を使用しなければなりませんhttps://developer.apple.com/library/prerelease /0ios/documentation/UIKit/Reference/UIAppearance_Protocol/index.html –