14

私はこのコードを使用しています

CGRect frame = self.mytext.frame;
frame.size.height = self.mytext.contentSize.height;
self.mytext.frame = frame;

しかし、iOS 7 では動作しません。誰かが理由を知っているか、同じ問題を抱えていますか?

編集:

ごめん。UIView、UITextView、および UIScrollView を作成して、uitextview の展開でテキストをロードできるようにしました。

このコードをviewDidLoadで使用しました

CGRect frame = self.moreDetailsTextView.frame;
frame.size.height = self.moreDetailsTextView.contentSize.height;
self.moreDetailsTextView.frame = frame;

CGRect moreViewFrame =  self.moreDetailsView.frame;
moreViewFrame.size.height = frame.size.height + 270;
self.moreDetailsView.frame = moreViewFrame;

int scrollViewHeight =  moreViewFrame.size.height + 235;
self.scrollView.contentSize = CGSizeMake(320, scrollViewHeight);

これは ios6 では正常に機能していましたが、xcode5 と ios7 では、シミュレーターでアプリをテストするときに uitextview が展開されません。

4

9 に答える 9

22

IOS7 で sizeToFit も機能していないことに気付きました - おそらく解決策があなたにも役立つかもしれません

[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];
于 2013-09-25T13:56:40.987 に答える
9

最後に私はそれをしました。

誰かが同じ問題を抱えている場合、以前にこのコードを持っていた

    [_moreDetailsTextView sizeToFit];
于 2013-09-19T21:57:10.240 に答える
5

この正確な問題に対処するために、ユーザー入力のサイズに基づいて自動的に拡大および縮小し、最大および最小の高さによって制限できる自動レイアウト ベースの軽量 UITextView サブクラスを作成しました。

主に Interface Builder で使用するために作成され、自動レイアウトでのみ機能します

https://github.com/MatejBalantic/MBAutoGrowingTextView

于 2014-05-16T12:55:37.777 に答える
2
[UITextView sizeToFit];

sizeToFit を使用すると、テキストビューのサイズが変更されますが、一部のテキストが下から切り取られます。これを解決する方法はありますか?

解決:

最後に、次のスレッドで説明されている方法が機能しました。https://stackoverflow.com/a/18818036/1869452

于 2013-10-03T09:18:36.427 に答える
1

最近、入力中にサイズが変更されるこの CSGrowingTextView を見つけました

于 2014-03-04T16:00:01.163 に答える
1

どちらの答えも私にとってはうまくいきませんでした。テキストが複数行で大きくなるにつれて、高さを動的に拡張したい編集可能な UITextView があります。

iOS6 では問題なく動作しましたが、iOS7 では、カーソルを表示したままにするためにテキスト ビューをスクロールする際に問題がありました。

私にとっての解決策は、iOS7 でテキスト ビューの下部インセットを配置することでした。このような:

_textView.contentInset = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0") ? UIEdgeInsetsMake(0, 0, DEFAULT_FONT_SIZE, 0) : UIEdgeInsetsZero;

満足のいく結果。幸運を。

于 2013-10-23T14:40:41.380 に答える
0

GrowingTextViewHandlerは、ユーザーがテキストを入力するとテキスト ビューのサイズを変更する NSObject サブクラスです。NSObject サブクラスによるサイズ変更の処理は、UITextView のサブクラスで機能するため、UITextView をサブクラス化するよりも便利です。使用例はこちら。

@interface ViewController ()<UITextViewDelegate>

 @property (weak, nonatomic) IBOutlet UITextView *textView;
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
 @property (strong, nonatomic) GrowingTextViewHandler *handler;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.handler = [[GrowingTextViewHandler alloc]initWithTextView:self.textView withHeightConstraint:self.heightConstraint];
  [self.handler updateMinimumNumberOfLines:3 andMaximumNumberOfLine:8];
 }

- (void)textViewDidChange:(UITextView *)textView {
  [self.handler resizeTextViewWithAnimation:YES];
}
@end
于 2015-06-03T10:23:05.670 に答える
0

このメソッドを使用して textView の新しいサイズを取得します

CGSize sz = [_textView.text sizeWithFont:_textView.font]

高さでうまく機能しなかった場合は、前のメソッドから取得した幅を取得し、次のメソッドで使用して必要な適切な高さを取得します

- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width
{
    UITextView *textView = [[UITextView alloc] init];

    [textView performSelectorOnMainThread:@selector(setAttributedText:)
                                    withObject:text
                                 waitUntilDone:YES];

    CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)];
    return size.height;
}

注 : ビューにアニメーションがあった場合、ビューが再度再描画されるため、view.frame で行われたすべての変更は破棄されます。したがって、フレーム自体を処理するよりも、制約を処理する方が良いでしょう。ビューが更新された場合でも、制約で行う変更は永続的なものになるからです。

制約の IBoutlet を作成し、そのようにクラスに接続します

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *your_constraint;

そのようなview.frameパラメータを変更する方法と同じように、制約の値を変更します

            _constraintHeaderTitle.constant = THE_NEW_VALUE;
于 2014-04-27T12:37:57.127 に答える
0

iOS 9.3.1 でこれを解決するための完全なソリューションに取り組みました。ここで見つけてください

ここに画像の説明を入力

于 2016-04-15T18:21:54.347 に答える