2016-10-25 21 views
0

私は公開しようとしているアプリに仕上げていますが、のUIButtonの背景イメージを尊重することが困難でした。私が指定したcontentModeに関係なく、画像はちょうどcontentModeの設定に関係なくバックグラウンドでプルーフされます。UIButtonのbackgroundImageのコンテンツモードが尊重されていません

私はこのトピックをカバーするpostを見ましたが、私の状況では何もしないようです。

これはviewDidLoadから呼び出されます。

// I tried putting the contentMode lines here... 
myButton.imageView!.contentMode = .scaleAspectFit 
myButton.contentMode = .scaleAspectFit 
myButton.setBackgroundImage(UIImage(named: "myImage.png"), for: .normal) 

// ...and here 
// myButton.imageView!.contentMode = .scaleAspectFit 
// myButton.contentMode = .scaleAspectFit 

// I threw this in for S's & G's to see if it would work...it didn't 
myButton.translatesAutoresizingMaskIntoConstraints = false 
myButton.imageView?.translatesAutoresizingMaskIntoConstraints = true 

私が欠けているかわからないんだけど、私はそれは私の一部の愚かな驚くべきものになりますので安心。私はUIButtonの背景画像のcontentModeをどのように尊重することができるかについての提案を歓迎します。読んでくれてありがとう。

更新

ボタンはカスタムボタンではなく、システムボタンとして入力されます。

答えて

4

問題は、setBackgroundImage()メソッドを使用してイメージを追加することです。これはあなたの画像をいくつかの背景画像ビューに追加し、myButton.imageView!のようなボタンからこのビューに到達することはできません。だからあなたのコードでcontentTypeを別の空白のために設定してくださいUIImageView

UIImageViewにアクセスしたい場合は、.subviews配列を使用できますが、viewDidLoad()メソッド内でそれを実行しようとすると、このImageViewがまだ存在しないことがわかります。ボタンが表示される前に、後で追加されます。だからviewDidAppear()メソッドを使ってこのようにしてみてください。

これが役立つことを願っています。私の英語には申し訳ありません。

override func viewDidLoad() { 
    myButton.setBackgroundImage(UIImage(named: "myImage"), for: .normal) 
    myButton.setTitle("Some title", for: .normal) 
} 

override func viewDidAppear(_ animated: Bool) { 
    (myButton.subviews[0] as! UIImageView).contentMode = .scaleAspectFit 
} 
+0

これはトリックでした!ありがとうございました!!!私は今のように感じています - > https://www.youtube.com/watch?v=IS7Og1zvdy8代わりに、私は 'viewWillAppear'に入れていますので、ビューが読み込まれたときに素敵です。 – Adrian

関連する問題