调整 UIScrollView 的大小以适应其内容……不起作用
Posted
技术标签:
【中文标题】调整 UIScrollView 的大小以适应其内容……不起作用【英文标题】:Resizing UIScrollView to fit its content… not working 【发布时间】:2013-09-10 10:40:13 【问题描述】:我有一个应用,它使用 UIScrollView 来显示由 Interface Builder 创建的内容。我以编程方式向它添加了一个 UITextView,因为它的内容是可变的并且我希望它调整大小。这个完成了!调整 UIScrollView 的大小以适应新的 UITextView 大小时出现问题。我只是无法完成它。我尝试了各种方法,包括:
CGRect contentRect = CGRectZero; for (UIView *view in self.scrollView.subviews)
contentRect = CGRectUnion(contentRect, view.frame);
self.scrollView.contentSize = contentRect.size;
我认为问题在于它是由 Interface Builder 构建的,但 UIScrollView 也包含其他元素,因此我无法以编程方式创建它。我希望有人能在这方面帮助我。
更新 1:我将 UIView 和 UIScrollView 的高度都从 Interface Builder 设置为 1024。
更新 2(修复):
我可以通过在viewDidLoad
方法的末尾发出一个计时器来解决这个问题,如下所示:
[NSTimer scheduledTimerWithTimeInterval:0.00001 target:self selector:@selector(resizeScrollView) userInfo:nil repeats:NO]
然后在 resizeScrollView
方法中调整它的大小:
-(void)resizeScrollView
CGFloat scrollViewHeight = 0.0f;
for (UIView* view in scrollView.subviews)
scrollViewHeight += view.frame.size.height;
[scrollView setContentSize:(CGSizeMake(320, scrollViewHeight-50))];
感谢大家的帮助!
注意:此解决方案的灵感来自 Maniac One 的回答。谢谢!
【问题讨论】:
【参考方案1】:scrollView.contentsize=textview.size
【讨论】:
这不起作用。它仍然什么都不做,因为除了 UITextView 之外还有其他元素。 在这种情况下你可以使用scrollview.contentSize=CGSizeMake(Addition of widths of all views in scrollView, Addition of heights of all views in scrollView)
还是不行。。我是在viewDidLoad方法里做的,对吗?
使用计时器来调整视图大小不是一个好主意。相反,您可以使用UITextView delegate 方法。
你可以使用方法- (void)textViewDidChange:(UITextView *)textView
【参考方案2】:
改变 滚动视图.contentSize 根据您在“viewDidScroll”委托中的程序要求
(void)scrollViewDidScroll:(UIScrollView *)sender 如果您在滚动时获取文本字段的新值【讨论】:
实际上,当视图在viewDidLoad
中加载时,内容会发生变化,然后我通过编程方式根据其内容调整 UITextView 的大小。以上是关于调整 UIScrollView 的大小以适应其内容……不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何调整 UIScrollView 的大小以适合子 UITextViews 的内容
如何调整 UITableViewCell 的大小以适应其内容?