web-dev-qa-db-ja.com

UITextViewコンテンツインセット

ContentInsetsで少し奇妙な何かに遭遇しました

Uitextviewにパディングを追加しようとしているので、ストーリーボードにcontentInsetが50個残っているUITextViewがあります

ただし、このテストで下に示すように、uitextviewの下部にスクロールバーが表示されます。enter image description here

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コードが追加されたビューと、追加される前との間に目に見える違いがあるため、何かがおかしい! (ありがとう)

56
H Bellamy

更新:このソリューションはiOS 7の時点で古くなっています。

以下の回答 を参照してください。 iOS 7.0では、textContainerInsetの-​​ UITextView プロパティが導入されました。

textView.textContainerInset = UIEdgeInsetsMake(0, 50, 0, 0);

iOS 7以前のソリューション:

ContentInsetがこの水平スクロールバーを引き起こすことなくuitextviewを押しつぶすという印象を受けました...

これはcontentInsetUITextViewとどのように機能するかではありません。 contentInsetについては Appleのドキュメント を参照してください:

コンテンツビューが外側のスクロールビューからはめ込まれる距離...このプロパティを使用して、コンテンツの周りのスクロール領域に追加します。

contentInsetは、コンテンツの周りにaddedです。


上記のコードを使用して、contentSizeviewDidLayoutSubviewsを変更できます。

- (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 cut off on right side


UITextViewで水平方向のパディングの外観を実現できた最善の方法は、コンテナUIView内に配置することです。この場合、現在のテキストビューと同じサイズのUIViewを作成し、コンテナビュー内に50px狭いテキストビューを追加します。

この回避策は、テキストビューの背景がある場合に問題を引き起こす可能性がありますが、上記のスクリーンショットからは、それが問題ではないようです。

UITextViewコンテナ内のUIView(赤枠):

UITextView inside container UIView

UITextViewに背景がある場合は、以下を参照してください。

それがお役に立てば幸いですし、誰かがより良い解決策を見つけることができたら、私はそれについて聞きたいです!

92
Steph Sharp

IOS 7では、UITextViewはTextKitに基づいており、新しいプロパティtextContainerInsetがあります。期待どおりに動作します。

UITextView *textView = ...;
// Left inset of 50 points
textView.textContainerInset = UIEdgeInsetsMake(0.0, 50.0, 0.0, 0.0);
172
Florian