我现在正在尝试创建自己的文本面板(带有代码突出显示等)。
事实上一切都准备好了,除了一件事——滚动
我做了什么:
创建了 UIScrollView
并使用 Interface builder 将我自己的 View 作为 subview
插入。
在 ViewController
viewDidLoad
方法中,我将初始 textfield
大小指定为 UIScrollView
内容大小。
当用户在我的文本字段中输入过多内容时。我调用委托(delegate)(即 ViewController
)来更改大小。
为此,我只需编写
[scrollView setContentSize:newSize];
我得到的是 ScrollView 的增加,而不是我的文本字段 - 只出现空行。我想我也需要设置 View 的大小,但我不知道如何...
我的问题的第二部分:
每次我调用 [textField setNeedsDisplay]
时,它都会调用 drawRect:
方法,其中的矩形等于我 View 的整个大小(比它的可见部分大得多)。如果我尝试使用我的 View 修改大小超过 3 mb 的文件,它会是什么样子?我怎样才能强制它只重绘可见部分?
感谢您的关注。
最佳答案
第 1 部分:
ScrollView 的内容大小实际上与其包含的 View 的大小或位置无关。如果要更改内容 View 的大小以及 ScrollView 的内容,则需要调用两种不同的方法。
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
将整个 View 标记为需要显示。要使其仅显示可见部分,您需要使用 setNeedsDisplayInRect:visibleRect
。
假设 View 位于左上角(其框架的原点为 0)并且 ScrollView 不允许缩放,则可以使用 ScrollView 的内容偏移量和边界大小找到可见矩形。
CGRect visibleRect;
visibleRect.origin = [scrollView contentOffset];
visibleRect.size = [scrollView bounds].size;
[self setNeedsDisplayInRect:visibleRect];
如果只有部分变化,您也可以选择绘制可见矩形的一部分。
关于iphone - iOS : how to change the size of the UIScrollView content?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5464550/