このコードを使用しています
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が拡張されません。
IOS7で気付いたsizeToFitも機能していなかった-おそらくこのソリューションも役立つかもしれません
[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];
やっとやった。
誰かが同じ問題を抱えている場合は、このコードを以前に持っていただけです
[_moreDetailsTextView sizeToFit];
この正確な問題に対処するために、ユーザー入力のサイズに基づいて自動的に拡大および縮小し、最大および最小の高さによって制約される、自動レイアウトベースの軽量UITextViewサブクラスを作成しました-すべて1行のコードなしで。
主にInterface Builderで使用するために作成され、自動レイアウトでのみ機能します
[UITextView sizeToFit];
SizeToFitを使用すると、テキストビューのサイズが変更されますが、一部のテキストは下から切り取られます。これを解決する方法はありますか?
ソリューション:
最後に、次のスレッドで説明されている方法が機能しました。 https://stackoverflow.com/a/18818036/1869452
最近、私はこのCSGrowingTextViewを入力中にサイズ変更することを発見しました。多分それは役に立ちます: https://github.com/cloverstudio/CSGrowingTextView
どちらもうまくいきませんでした。編集可能なUITextViewがあり、テキストが複数行に成長するにつれて、高さが動的に拡張されます。
IOS6では問題なく動作しましたが、iOS7では、カーソルを表示したままにするためにテキストビューをスクロールするときに問題が発生しました。
私にとっての解決策は、iOS7でテキストビューの下部インセットを配置することでした。このような:
_textView.contentInset = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0") ? UIEdgeInsetsMake(0, 0, DEFAULT_FONT_SIZE, 0) : UIEdgeInsetsZero;
満足のいく結果。幸運を。
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
このメソッドを使用して、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;
私はiOS 9.3.1でこれを解決するための完全なソリューションに取り組んできました。それを見つけてください ここ 。