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 子类,它会根据用户输入的大小自动增长和缩小,并且可以通过最大和最小高度来限制——所有这些都不需要一行代码。

主要用于界面生成器,仅适用于自动布局

https://github.com/MatejBalantic/MBAutoGrowingTextView

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

使用 sizeToFit 调整 textview 的大小,但会从底部剪切一些文本。知道如何解决这个问题吗?

解决方案:

最后,以下线程中描述的方法起作用了。https://stackoverflow.com/a/18818036/1869452

于 2013-10-03T09:18:36.427 回答
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 回答
1

最近我发现这个 CSGrowingTextView 在你输入时会变大,也许它可以帮助: https ://github.com/cloverstudio/CSGrowingTextView

于 2014-03-04T16:00:01.163 回答
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

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

我已经在 iOS 9.3.1 上开发了一个完整的解决方案来解决这个问题。在这里找到它。

在此处输入图像描述

于 2016-04-15T18:21:54.347 回答