※この記事は6年以上前の記事です。
現在は状況が異なる可能性がありますのでご注意ください。
どうも、ついに車買いましたー!
フィットのRSです。
車のことはよくわからないですが、
いい車とのことです。
(宝の持ち腐れか)
さて、そんな自慢話はよくて、表記の件。
調べてみればわかるが、これ、実はかなり難しい。
ストーリーボードで置いた物の高さを変えるのは特に難しい。
調べてだいたい見つかるのは下記のエントリーのような方法。
いや、角丸つけたまんまにしたいんだから。
しかも、やっても効かんし。
さらに調べて、こんなエントリーにたどり着いたが・・・。
●UITextFieldに余白(パディング、マージン)を持たせる【正攻法】これはかなり確信に近づいた。
実際、最初調べてたのは余白の付け方だし、
余白つけるのはうまくいった。
しかし、高さを調整するにはいたらず・・・。
そこで、発想を転換して調べることにした。
UIViewの生成サイクルの中でなんかすればいいのでは?
と調べてみたのだ。
(UITextField含め、多くのView系クラスは、UIViewがスーパークラスなので)
そして、見つけたのが、下記記事。
これを参考に、レイアウトを決めるメソッドの前に、実行してみた。
すると、うまく動いたではないか!
余白の変更と併せたものが下記。
import UIKit class CustomTextField: UITextField { //入力したテキストの余白 override func textRect(forBounds bounds: CGRect) -> CGRect { return bounds.insetBy(dx: 20, dy: 0) } //編集中のテキストの余白 override func editingRect(forBounds bounds: CGRect) -> CGRect { return bounds.insetBy(dx: 20, dy: 0.0) } //プレースホルダーの余白 override func placeholderRect(forBounds bounds: CGRect) -> CGRect { return bounds.insetBy(dx: 20, dy: 0.0) } // 高さを高くするために実行(デフォ値は、フォントサイズによって変動) override func layoutSubviews() { self.frame = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, width: self.frame.size.width, height: 50) super.layoutSubviews() } }
つまり、layoutSubviewsが実行される前に、親View(自身)の大きさを変えてしまえばいいのだ。
あとは、ストーリーボード上のテキストフィールドに、このカスタムクラスを適用すればいい。
これ、おそらく、テキストの量によって高さを変動なんてもできるはず。
というか、これを使えば、オートレイアウトも、デフォルト値もなんも怖くない。
なんせ、レイアウトする前に全て終わらせてしまえばいいのだから・・・。
(↑暗殺者みたいなセリフやな←中二)
これはきたかもしれないですね。
コメントする