滚动到 UITextView 文本的末尾

Posted

技术标签:

【中文标题】滚动到 UITextView 文本的末尾【英文标题】:Scrolling to the end of UITextView's text 【发布时间】:2016-03-12 18:44:28 【问题描述】:

我在视图中有一些内容(例如图像、标签),最后一项是描述 (UITextView)。现在我正在尝试根据UITextView 文本动态滚动内容。这是我的代码:

- (void)viewDidAppear:(BOOL)animated 

    _descriptions.scrollEnabled = NO;
    [_descriptions sizeToFit];

    _infoScrollView.contentSize = CGSizeMake(_contentsOnInfoView.frame.size.width,
                                             _contentsOnInfoView.frame.size.height + _descriptions.frame.size.height);

结果如下:

如您所见,有很多空白空间。我需要滚动到文本的末尾。

【问题讨论】:

_descriptions.text.length - 嗯,你用文字长度来测量高度? 因为文本输入是动态的。是的 !我做对了吗? @schmidt9 如果 _descriptions 是你的文本字段,那么你应该这样测量,我认为:_infoScrollView.contentSize = CGSizeMake(_contentsOnInfoView.frame.size.width, _contentsOnInfoView.frame.size.height + _descriptions.frame.size.height); 你打电话给[_descriptions sizeToFit]; 据我所知,viewDidAppear 被称为 after viewDidLoad。也许你应该把你的测量代码放在viewDidAppear 目前尚不清楚您想要的结果是什么,听起来您有一个来自 cmets 的 hacky(但有效)解决方案。您能否用这个 hacky-yet-better 解决方案中的内容更新问题,和/或更好地解释上面的屏幕截图有什么问题。 【参考方案1】:

我建议你试试这个。

[myTextView scrollRangeToVisible:NSMakeRange([myTextView.text length], 0)]

【讨论】:

【参考方案2】:

你应该写你的代码

-(void) viewDidLayoutSubviews 

在此方法中,所有组件都根据运行设备的大小进行框架。并在出现视图之前执行。

【讨论】:

【参考方案3】:
//may be it will work for you
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
    //set the line break mode
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;

    NSDictionary *attrDict = [NSDictionary dictionaryWithObjectsAndKeys: description.font,
                              NSFontAttributeName,
                              paragraphStyle,
                              NSParagraphStyleAttributeName,
                              nil];


    CGRect rect = [description.text boundingRectWithSize:CGSizeMake(description.size.width, FLT_MAX)
                                                  options:NSStringDrawingUsesLineFragmentOrigin
                                               attributes:attrDict
                                                  context:nil];
    CGSize size = rect.size;
   _infoScrollView.contentSize = CGSizeMake(_contentsOnInfoView.frame.size.width,description.frame.origin.y + size.height + 20)

【讨论】:

【参考方案4】:

我刚刚找到了答案,在 UI 中有一行将描述与一些信息分开!我只是计算线的y 并总结描述height

_descriptions.scrollEnabled = NO;
[_descriptions sizeToFit];
_infoScrollView.contentSize = CGSizeMake(_infoView.frame.size.width, _line.frame.origin.y + _descriptions.bounds.size.height);

现在可以正常使用了!

【讨论】:

以上是关于滚动到 UITextView 文本的末尾的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 不循环滚动

在swift或obj-c中的uitextview末尾添加一个视图

在启用滚动的堆栈视图中扩展 UITextView

UITextview 光标移动到行尾

UITextView 在滚动之前不会显示

当新行添加到 UITextView 实例中时,如何向上滚动视图?