1. ホーム
  2. ios

UITextViewコンテンツインセット

2023-09-28 10:52:26

質問

contentInsetsでちょっと不思議なことに遭遇しました。

ストーリーボードにUITextViewがあり、contentInsetがleft50となっていますが、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

そこには はありません。 コードが追加されたビューと追加される前との間に目に見える違いがあるので、何かが間違っているようです (ありがとうございます)

どのように解決するのですか?

UPDATE: この解決策はiOS 7の時点で古くなっています。

参照 この回答は以下の通りです。 . iOS 7.0 では textContainerInset プロパティに UITextView が導入された。

Objective-Cが紹介されました。

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

スウィフト

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

または ゼブ・ヴァックス が提案したように、Swift 5.0 で。

textView.textContainerInset.left = 50


iOS 7以前のソリューションです。

contentInsetはこの横スクロールバーを発生させずにuitextviewを潰してくれるという印象でしたが...。

私は、これはどのような方法ではないことを恐れている contentInset がどのように機能するかは UITextView . 参照 Apple のドキュメント を参照してください。 contentInset という記述があるところです。

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

contentInset が追加されました。 が追加されます。


を変更することができます。 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 の中で水平方向のパディングを実現する最も良い方法は、コンテナ UIView . あなたの場合、単に UIView を作成し、コンテナビューの中に50px狭いテキストビューを追加します。

この回避策は、テキスト ビューに背景がある場合に問題が発生する可能性がありますが、上記のスクリーンショットからは、それが問題であるようには見えません。

UITextView (赤枠)の中に UIView コンテナの中にある。

もし、あなたの UITextView が背景を持っている場合は、参照してください。

もし誰かがより良い解決策を見つけたら、ぜひ教えてください。