带滚动内容的UiScrollView

时间:2010-05-06 11:45:30

标签: iphone uiscrollview

我有一个UIScrollView类型的详细信息页面。在它上面我想要一个可选的UIImageView和一个强制的UITextView。如果没有可用的图像,则图像视图不应占用任何空间。文本视图的文本可以有不同的大小。

当视图加载了图像和文本时,我需要能够滚动浏览所有内容。所以图像从屏幕顶部滑落。

我无法完成这项工作,我觉得它应该很容易。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您应该创建自己的视图,该视图在UIScrollView之后继承。

在您的自定义YourScrollView中,您应该覆盖

- (void) layoutSubviews;

计算文本大小,图像大小(以及之间的间距),然后使用以下方法设置滚动视图的contentSize:

[self setContentSize:CGSizeMake(CGRectGetWidth(self.bounds), yourCalculatedHeight)];

希望这有帮助, 保罗

答案 1 :(得分:0)

您必须使用视图的大小调用setContentSize。

CGRect frameOfImage;
CGRect frameOfText;
CGRect frameOfContent;

frameOfImage.origin = CGPointZero;
frameOfImage.size = myImage ? [myImage size] : CGSizeZero;

[myImage setFrame:frameOfImage];

frameOfText.origin.x = 0;
frameOfText.origin.y = frameOfImage.origin.y + frameOfImage.size.height;
frameOfText.size = [myText.text sizeWithFont:myText.font forWidth:myScroll.bounds.width lineBreakMode:myText.lineBreakMode];

[myText setFrame:frameOfText];

frameOfContent = CGRectUnion( frameOfImage , frameOfText );
frameOfContent.size.height += frameOfContent.origin.y;
frameOfContent.size.width += frameOfContent.origin.x;

[myScroll setContextSize:frameOfContent.size];

当您知道是否有图像时,您可以在控制器中的自定义UIScrollView的layoutSubviews中执行最后一次操作,或者一次完成。