滚动到 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 文本的末尾的主要内容,如果未能解决你的问题,请参考以下文章