iOS:如何更改UIScrollView内容的大小?

时间:2011-03-28 20:12:50

标签: iphone objective-c uiscrollview

我现在正在尝试创建自己的文本面板(带代码突出显示等)。

事实上,除了一件事之外,一切都准备好了 - 滚动

我做了什么: 创建UIScrollView并使用“界面”构建器将我自己的视图作为subview插入。

ViewController viewDidLoad方法中,我将初始textfield大小指定为UIScrollView内容大小。

当用户在我的文本字段中写入太多内容时。我调用delegate(ViewController)来改变大小。 要做到这一点,我只需写

[scrollView setContentSize:newSize];

我得到的是增加滚动视图但不是我的文本字段 - 只显示空白行。我想我也需要设置我的视图大小,但我无法弄清楚如何......

我的问题的第二部分: 每当我调用[textField setNeedsDisplay]时,它会调用drawRect:方法,其中矩形等于我视图的整个大小(比它的可见部分大得多)。如果我尝试使用我的视图修改大小超过3 MB的文件,它会是什么样子?如何强制它仅重绘可见部分?

感谢您的关注。

3 个答案:

答案 0 :(得分:10)

第1部分

滚动视图的内容大小实际上与其包含的视图的大小或位置无关。如果要更改内容视图的大小以及滚动视图的内容,则需要调用两种不同的方法。

CGSize newSize;
UIScrollView *scrollView;
// assume self is the content view
CGRect newFrame = (CGRect){CGPointZero,newSize}; // Assuming you want to start at the top-left corner of the scroll view. Change CGPointZero as appropriate
[scrollView setContentSize:newSize]; // Change scroll view's content size
[self setFrame:newFrame]; // Change views actual size

第2部分

setNeedsDisplay将整个视图标记为需要显示。要使其仅显示可见部分,您需要使用setNeedsDisplayInRect:visibleRect 假设视图位于左上角(其帧的原点为0)且滚动视图不允许缩放,则可以使用滚动视图的内容偏移和边界大小找到可见的rect。

CGRect visibleRect;
visibleRect.origin = [scrollView contentOffset];
visibleRect.size = [scrollView bounds].size;
[self setNeedsDisplayInRect:visibleRect];

如果只是部分更改,您也可以选择绘制可见矩形的一部分。

答案 1 :(得分:2)

这比你想象的要简单,例如你的 UIScrollView 中有一个名为“ textDesc ”的 UITextView ,你想知道内容的大小,所以下一步将是这样的:

int contentHeight = textDesc.frame.size.height + textDesc.frame.origin.y;

计算 textDesc 的大小后,只需设置它:

[scrollView setContentSize:(CGSizeMake(320, contentHeight))];

就是这样,现在你的 scrollView 知道你里面文字的大小,并会自动调整大小,希望这会有所帮助,祝你好运。

答案 2 :(得分:0)

将文本字段autoresizingMask属性设置为灵活的高度和宽度:

[textField setAutoResizingMask:UIViewAutoResizingFlexibleHeight | UIViewAutoResizingFlexibleWidth];

当您更改父级的大小(scrollView的contentSize)时,这应该会自动展开视图

否则尝试:

[textField setFrame:CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)];

在您更改滚动视图的内容大小之后。