UIButtonのInsetsがうまく設定できなかったので調べてみた
UIButtonにpaddingを設定して表示したかったので以下のようなコードを書いたところ、文字サイズを全て固定で指定しているのにサイズがバラバラになってしまうという現象が発生しました。
btn.layer.cornerRadius = 16
btn.backgroundColor = UIColor.gray
btn.titleLabel?.font = UIFont.systemFont(ofSize: 28.0)
btn.titleEdgeInsets = UIEdgeInsetsMake(5.0, 7.0, 5.0, 7.0)
btn.titleLabel?.adjustsFontSizeToFitWidth = true
最初、日本語だけこのようなことになるのではないかと思いましたがそんなこともなさそうでした。文字数には影響されているようです。
ちなみにtitleEdgeInsets
を指定しなかったら文字サイズがバラバラになることはありませんでした。
UIButton
クラスをよく見てみると、もう一つInsetsを指定できるプロパティがありました。それがcontentEdgeInsets
です。試しにtitleEdgeInsets
ではなくcontentEdgeInsets
にUIEdgeInsetsMake(5, 7, 5, 7)を指定してみると以下のような表示になりました。
Insetsが正しく設定されているようです。
このような現象について書かれている記事はないかと探したところ、SnapKitのissueが見つかりました。そのissueでは「AutoLayoutでは残念ながらtitleEdgeInsets
は効かない。でもcontentEdgeInsets
なら実現できる。また、別のやり方としてintrinsicContentSize
を使うというやり方もある。」というやり取りがありました。結局このissueを立てた人はtitleEdgeInsets
の一部にマイナスの値を指定し、不足分をcontentEdgeInsets
の方で補充したようです。この部分についてはあるstackoverflowの回答を見ると言っていることがより理解できます。
ということでUIButtonでInsetがうまくいかない時はcontentEdgeInsets
の利用を検討してみるとうまくいくかもしれません。
Author And Source
この問題について(UIButtonのInsetsがうまく設定できなかったので調べてみた), 我々は、より多くの情報をここで見つけました https://qiita.com/akatsuki174/items/d3b917dc65ed83f0d510著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .