web-dev-qa-db-ja.com

Swiftで両方向に引き伸ばさずにUIButton内の画像を中央に配置する方法は?

カスタムキーボードを作成していますが、シフトアイコンの画像をシフトボタンの中央に配置する必要があります。画像は100px x 100pxです。

ただし、ポートレートのボタンフレームは36pt x 38ptで、ランドスケープのボタンフレームは68pt x 32ptです。ボタン画像の差し込みプロパティを使用して画像を中央に配置しようとしました。ただし、そうではありません。

私は自分で試して、画像の端のインセットを(25,25,25,25)に設定しました。画像は両方のサイズで中央にあります。ただし、アイコンが小さくなりすぎて表示されなくなります。

shiftButton.setImage(UIImage(named: "shift"), forState: .Normal)

shiftButton.imageEdgeInsets = UIEdgeInsetsMake(0,0,0,0)

ボタンをプログラムで作成しています。そして、アスペクト比を維持したままスケーリングするためのボタン、つまり1:1が必要です。その最大幅または高さは、常にボタンの高さ自体に関連付けられています。画像の幅/高さは、ボタンの高さの最大値でなければなりません。また、アイコンを歪ませるために何らかの方法で伸びてはいけません。ただし、ボタン自体は伸縮できます。

ボタンフレームに合わせて画像を拡大縮小する必要がありますが、アスペクト比は維持します。また、縮小または拡大することもできますが、常に1:1のアスペクト比を維持する必要があります。

この問題を解決するための提案はありますか?

24
Ariel

ついに解決策が生まれました。 UIButton内の画像のコンテンツモードを設定する必要があります。

解決策は、contentModeImageとともにボタン内で前景画像を使用している場合、contentModeUIButtonを更新することです。

shiftButton.contentMode = .Center
shiftButton.imageView?.contentMode = .ScaleAspectFit
26
Ariel
  • ユーザー定義のランタイム属性をボタンに追加します。

以下のスクリーンショットでは、値1はscaleAspectFitと同じです

imageView.ContentMode = scaleAspectFit

enter image description hereenter image description here

11

ボタンのコンテンツモードをCenterに設定します。

shiftButton.contentMode = .Center
4
Viktor Simkó

ストーリーボードのサイズインスペクターを使用してコンテンツのインセットを0に設定することで、画像を中央に配置することができました。

enter image description here

3
Justin Vallely

ストーリーボードを使用している場合は、ボタンのタイトルに何も設定されていないことを再確認してください。

2
Scott Zhu