79

contentInsets で少し奇妙なことに遭遇しました

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

ただし、このテストでは以下に示すように、uitextview の下部にスクロールバーが表示されます。ここに画像の説明を入力

私は contentInset がこの水平スクロールバーを発生させずに uitextview を押しつぶすという印象を受けていたので、水平スクロールバーの必要性を取り除き、すべて (インセットと uitextview 内のすべてのテキスト) をこれを必要とせずに表示するにはどうすればよいでしょうか?スクロール・バー。

注意: 水平方向のスクロールを防止したり、スクロールバーを表示しないようにすること (つまり、テキストを切り取ること) について質問しているわけではありません。

どうもありがとう!

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

コードが追加されたビューと追加される前のビューに目に見える違いはないので、何かがおかしいのです! (ありがとう)

4

2 に答える 2

195

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

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

スウィフト 4.2

textView.textContainerInset = UIEdgeInsets(top: 0, left: 50, bottom: 0, right: 0)
于 2013-11-18T16:28:38.340 に答える
136

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

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

目的 C:

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

迅速:

textView.textContainerInset = UIEdgeInsets(top: 0, left: 50, bottom: 0, right: 0)

または、Swift 5.0 でZeev Vaxが提案したように:

textView.textContainerInset.left = 50

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

contentInset は、この水平スクロール バーを発生させずに uitextview を押しつぶすという印象を受けました...

contentInset残念ながら、これは a でどのように機能するかではありませんUITextView。次のように記載されている場所については、 Apple のドキュメントを参照してください。contentInset

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

コンテンツの周囲にcontentInset追加されます。


上記に含めたコードを使用してcontentSizeinを変更できます。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 が右側で途切れる


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

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

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

コンテナ UIView 内の UITextView

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

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

于 2013-09-04T02:17:25.250 に答える