※この記事は7年以上前の記事です。
現在は状況が異なる可能性がありますのでご注意ください。
どうも、ついに車買いましたー!
フィットのRSです。
車のことはよくわからないですが、
いい車とのことです。
(宝の持ち腐れか)
さて、そんな自慢話はよくて、表記の件。
調べてみればわかるが、これ、実はかなり難しい。
ストーリーボードで置いた物の高さを変えるのは特に難しい。
調べてだいたい見つかるのは下記のエントリーのような方法。
●ランキング画面の作成、UITextFieldの高さを変更
いや、角丸つけたまんまにしたいんだから。
しかも、やっても効かんし。
さらに調べて、こんなエントリーにたどり着いたが・・・。
●
UITextFieldに余白(パディング、マージン)を持たせる【正攻法】
これはかなり確信に近づいた。
実際、最初調べてたのは余白の付け方だし、
余白つけるのはうまくいった。
しかし、高さを調整するにはいたらず・・・。
そこで、発想を転換して調べることにした。
UIViewの生成サイクルの中でなんかすればいいのでは?
と調べてみたのだ。
(UITextField含め、多くのView系クラスは、UIViewがスーパークラスなので)
そして、見つけたのが、下記記事。
●UIKitのView表示ライフサイクルを理解する
これを参考に、レイアウトを決めるメソッドの前に、実行してみた。
すると、うまく動いたではないか!
余白の変更と併せたものが下記。
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(自身)の大きさを変えてしまえばいいのだ。
あとは、ストーリーボード上のテキストフィールドに、このカスタムクラスを適用すればいい。
これ、おそらく、テキストの量によって高さを変動なんてもできるはず。
というか、これを使えば、オートレイアウトも、デフォルト値もなんも怖くない。
なんせ、レイアウトする前に全て終わらせてしまえばいいのだから・・・。
(↑暗殺者みたいなセリフやな←中二)
これはきたかもしれないですね。
どうも、ついに車買いましたー!
フィットのRSです。
車のことはよくわからないですが、
いい車とのことです。
(宝の持ち腐れか)
さて、そんな自慢話はよくて、表記の件。
調べてみればわかるが、これ、実はかなり難しい。
ストーリーボードで置いた物の高さを変えるのは特に難しい。
調べてだいたい見つかるのは下記のエントリーのような方法。
●ランキング画面の作成、UITextFieldの高さを変更
いや、角丸つけたまんまにしたいんだから。
しかも、やっても効かんし。
さらに調べて、こんなエントリーにたどり着いたが・・・。
●
UITextFieldに余白(パディング、マージン)を持たせる【正攻法】
これはかなり確信に近づいた。
実際、最初調べてたのは余白の付け方だし、
余白つけるのはうまくいった。
しかし、高さを調整するにはいたらず・・・。
そこで、発想を転換して調べることにした。
UIViewの生成サイクルの中でなんかすればいいのでは?
と調べてみたのだ。
(UITextField含め、多くのView系クラスは、UIViewがスーパークラスなので)
そして、見つけたのが、下記記事。
●UIKitのView表示ライフサイクルを理解する
これを参考に、レイアウトを決めるメソッドの前に、実行してみた。
すると、うまく動いたではないか!
余白の変更と併せたものが下記。
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(自身)の大きさを変えてしまえばいいのだ。
あとは、ストーリーボード上のテキストフィールドに、このカスタムクラスを適用すればいい。
これ、おそらく、テキストの量によって高さを変動なんてもできるはず。
というか、これを使えば、オートレイアウトも、デフォルト値もなんも怖くない。
なんせ、レイアウトする前に全て終わらせてしまえばいいのだから・・・。
(↑暗殺者みたいなセリフやな←中二)
これはきたかもしれないですね。
コメントする