ContentInsetsで少し奇妙な何かに遭遇しました
Uitextviewにパディングを追加しようとしているので、ストーリーボードにcontentInsetが50個残っているUITextViewがあります
ただし、このテストで下に示すように、uitextviewの下部にスクロールバーが表示されます。
ContentInsetは、この水平スクロールバーを発生させずにuitextviewを押しつぶすという印象を受けていたので、水平スクロールバーの必要性をなくし、すべて-uitextviewのインセットとすべてのテキスト-を必要なく表示できるようにする方法スクロール・バー。
N.B:水平方向のスクロールを防止したり、スクロールバーを表示したりすることを求めていません(したがって、テキストを切り取ります)
どうもありがとう!
Atomkの場合(UITextViewはssと呼ばれます)
NSLog(@"Content Size Before %f",self.ss.contentSize.width); Logs: 280
CGSize size=self.ss.contentSize; size.width=size.width-50;
[self.ss setContentSize:size];
NSLog(@"Content Size After %f",self.ss.contentSize.width); Logs: 230
noコードが追加されたビューと、追加される前との間に目に見える違いがあるため、何かがおかしい! (ありがとう)
更新:このソリューションはiOS 7の時点で古くなっています。
以下の回答 を参照してください。 iOS 7.0では、textContainerInset
の- UITextView
プロパティが導入されました。
textView.textContainerInset = UIEdgeInsetsMake(0, 50, 0, 0);
iOS 7以前のソリューション:
ContentInsetがこの水平スクロールバーを引き起こすことなくuitextviewを押しつぶすという印象を受けました...
これはcontentInset
がUITextView
とどのように機能するかではありません。 contentInset
については Appleのドキュメント を参照してください:
コンテンツビューが外側のスクロールビューからはめ込まれる距離...このプロパティを使用して、コンテンツの周りのスクロール領域に追加します。
contentInset
は、コンテンツの周りにaddedです。
上記のコードを使用して、contentSize
のviewDidLayoutSubviews
を変更できます。
- (void)viewDidLayoutSubviews
{
self.textView.contentInset = UIEdgeInsetsMake(0, 50, 0, 0);
NSLog(@"Content Size Before %f",self.textView.contentSize.width); //Logs: 280
CGSize size=self.textView.contentSize;
size.width=size.width-50;
[self.textView setContentSize:size];
NSLog(@"Content Size After %f",self.textView.contentSize.width); //Logs: 230
}
ただし、これにより、右側のテキストが切り取られます。
UITextView
で水平方向のパディングの外観を実現できた最善の方法は、コンテナUIView
内に配置することです。この場合、現在のテキストビューと同じサイズのUIView
を作成し、コンテナビュー内に50px狭いテキストビューを追加します。
この回避策は、テキストビューの背景がある場合に問題を引き起こす可能性がありますが、上記のスクリーンショットからは、それが問題ではないようです。
UITextView
コンテナ内のUIView
(赤枠):
UITextView
に背景がある場合は、以下を参照してください。
それがお役に立てば幸いですし、誰かがより良い解決策を見つけることができたら、私はそれについて聞きたいです!
IOS 7では、UITextView
はTextKitに基づいており、新しいプロパティtextContainerInset
があります。期待どおりに動作します。
UITextView *textView = ...;
// Left inset of 50 points
textView.textContainerInset = UIEdgeInsetsMake(0.0, 50.0, 0.0, 0.0);