繁体   English   中英

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

[英]iOS: how to change the size of the UIScrollView content?

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

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

我做了什么:创建了UIScrollView并使用Interface builder将我自己的视图作为subview插入。

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

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

[scrollView setContentSize:newSize];

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

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

感谢您的关注。

第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];

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

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

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

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

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

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

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

[textField setAutoResizingMask:UIViewAutoResizingFlexibleHeight | UIViewAutoResizingFlexibleWidth];

这应该在您更改父级的大小时自动扩展视图(scrollView的contentSize)

否则尝试:

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

刚更改滚动视图的内容后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM