在ios 7上动态扩展UITextView

时间:2013-09-18 23:40:07

标签: uiview uitextview ios7

我正在使用此代码

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在我在模拟器中测试应用程序时不会扩展。

9 个答案:

答案 0 :(得分:22)

在IOS7中注意到sizeToFit也不起作用 - 或许这个解决方案也可以帮到你

[UITEXTVIEW sizeToFit];
[UITEXTVIEW layoutIfNeeded];

答案 1 :(得分:9)

最后我做到了。

如果有人遇到同样的问题,请在

之前使用此代码
    [_moreDetailsTextView sizeToFit];

答案 2 :(得分:5)

为了解决这个问题,我制作了一个基于自动布局的轻量级UITextView子类,它根据用户输入的大小自动增长和缩小,并且可以通过最大和最小高度进行约束 - 所有这些都没有一行代码。

主要用于“界面”构建器,仅适用于“自动布局”

https://github.com/MatejBalantic/MBAutoGrowingTextView

答案 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

enter image description here