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

les*_*hka 5 iphone objective-c uiscrollview

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

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

我做了什么:创建UIScrollView并插入我自己的视图作为subview使用接口构建器.

ViewController viewDidLoad方法中,我将初始textfield大小指向UIScrollView内容大小.

当用户在我的文本字段中写入太多内容时.我呼叫委托(这是ViewController)改变大小.要做到这一点,我只需写

[scrollView setContentSize:newSize];
Run Code Online (Sandbox Code Playgroud)

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

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

感谢您的关注.

ugh*_*fhw 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
Run Code Online (Sandbox Code Playgroud)

第2部分:

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

CGRect visibleRect;
visibleRect.origin = [scrollView contentOffset];
visibleRect.size = [scrollView bounds].size;
[self setNeedsDisplayInRect:visibleRect];
Run Code Online (Sandbox Code Playgroud)

如果仅更改零件,您还可以选择绘制可见矩形的一部分.