web-dev-qa-db-ja.com

iOS 7でのUITextViewの動的拡張

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

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が拡張されません。

14

IOS7で気付いたsizeToFitも機能していなかった-おそらくこのソリューションも役立つかもしれません

[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];
22
Nick Wood

やっとやった。

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

    [_moreDetailsTextView sizeToFit];
9

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

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

https://github.com/MatejBalantic/MBAutoGrowingTextView

5
Matej Balantič
[UITextView sizeToFit];

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

ソリューション:

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

2
Namit Gupta

最近、私はこのCSGrowingTextViewを入力中にサイズ変更することを発見しました。多分それは役に立ちます: https://github.com/cloverstudio/CSGrowingTextView

1
Josip B.

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

IOS6では問題なく動作しましたが、iOS7では、カーソルを表示したままにするためにテキストビューをスクロールするときに問題が発生しました。

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

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

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

1
ancajic

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
0
hsusmita

このメソッドを使用して、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;
0
Mohammad Allam

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

enter image description here

0
Andres Canella