UITextViewの高さを動的に変更しようとしています。
... UITextView* textView; ...
CGRect textViewNewFrame = CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.size.width, 130);
textView.frame = textViewNewFrame;
IBでは、UITextViewと上揃えのUIButtonがあります。UIButtonの高さは130ピクセルです。UITextViewの高さは、たとえば150pxです。
上記のコードを実行すると、UITextViewは44px短すぎます。CGRectMake行を終了するように変更する必要があります。
..., 130 + 44);
ただし、IBでUITextViewの高さを130pxに「ハードコーディング」すると、UIButtonとUITextViewは上揃えと下揃えの両方でレンダリングされます(どちらも同じ高さです)。
したがって、UITextViewのフレームの高さを動的に変更する場合は、44を追加する必要がありますが、IBを介して高さを「静的に」設定する場合は追加しません。
奇妙なことに、UILabelはこのように誤動作しません(動的にサイズ変更するときに44pxを追加する必要はありません)。
44はIBのマジックナンバー(ナビゲーションバーの高さなど)であることは知っていますが、なぜそれを追加する必要があるのですか?私は何かを逃している/何か間違ったことをしているのですか、それともこれは単なる異常ですか?これは非常に一般的な操作であるに違いないのではないかと心配していますが、同じ質問をして同じ結論に達する人は他にいません。