我正在使用此代码
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在我在模拟器中测试应用程序时不会扩展。
答案 0 :(得分:22)
在IOS7中注意到sizeToFit也不起作用 - 或许这个解决方案也可以帮到你
[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];
答案 1 :(得分:9)
最后我做到了。
如果有人遇到同样的问题,请在
之前使用此代码 [_moreDetailsTextView sizeToFit];
答案 2 :(得分:5)
为了解决这个问题,我制作了一个基于自动布局的轻量级UITextView子类,它根据用户输入的大小自动增长和缩小,并且可以通过最大和最小高度进行约束 - 所有这些都没有一行代码。
主要用于“界面”构建器,仅适用于“自动布局”
答案 3 :(得分:2)
[UITextView sizeToFit];
使用sizeToFit调整textview的大小,但从底部剪切一些文本。知道如何解决这个问题吗?
<强>解决方案:强>
最后,以下线程中描述的方法有效。 https://stackoverflow.com/a/18818036/1869452
答案 4 :(得分:1)
这两个答案都不适合我。我有可编辑的UITextView,我希望在文本增长多行时动态扩展。
它适用于iOS6,但我在iOS7上遇到问题,滚动文本视图以保持光标可见。
我的解决方案是在iOS7上放置文本视图的底部插图。像这样:
_textView.contentInset = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0") ? UIEdgeInsetsMake(0, 0, DEFAULT_FONT_SIZE, 0) : UIEdgeInsetsZero;
满意的结果。祝你好运。
答案 5 :(得分:1)
最近我发现这个CSGrowingTextView在你输入时有大小,也许它可以提供帮助: https://github.com/cloverstudio/CSGrowingTextView
答案 6 :(得分: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;
答案 7 :(得分:0)
GrowingTextViewHandler是一个NSObject子类,它在用户键入文本时调整文本视图的大小。通过NSObject子类处理resize更有用,而不是子类化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
答案 8 :(得分:0)
我已经在iOS 9.3.1上开发了一个完整的解决方案来解决这个问题。找到它here。