调整 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 的内容

如何动态调整 UIScrollView 的大小?

如何调整 UITableViewCell 的大小以适应其内容?

UIView - 调整大小以适应内容

JavaScript [ExtJS]自动调整Ext.form.CombBox的大小以适应其内容

UIScrollView 内的 UIWebView 框架不会拉伸大小以适应所有内容