【发布时间】:2010-05-06 11:45:29
【问题描述】:
我有一个 UIScrollView 类型的详细信息页面。在它上面我想要一个可选的 UIImageView 和一个强制的 UITextView。如果没有可用的图像,则图像视图不应占用任何空间。文本视图的文本可以有不同的大小。
当视图加载了图像和文本时,我需要能够滚动浏览所有内容。所以图像从屏幕顶部滑落。
我只是无法完成这项工作,我觉得它应该很容易。有什么想法吗?
【问题讨论】:
标签: iphone uiscrollview
我有一个 UIScrollView 类型的详细信息页面。在它上面我想要一个可选的 UIImageView 和一个强制的 UITextView。如果没有可用的图像,则图像视图不应占用任何空间。文本视图的文本可以有不同的大小。
当视图加载了图像和文本时,我需要能够滚动浏览所有内容。所以图像从屏幕顶部滑落。
我只是无法完成这项工作,我觉得它应该很容易。有什么想法吗?
【问题讨论】:
标签: iphone uiscrollview
您必须使用视图的大小调用 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 中完成最后一点,或者在控制器中一次完成所有操作。
【讨论】:
您应该创建自己的视图,该视图继承于 UIScrollView。
在您的自定义 YourScrollView 中,您应该覆盖
- (void) layoutSubviews;
计算文本的大小、图像的大小(以及它们之间的额外间距),然后使用以下方法为滚动视图设置 contentSize:
[self setContentSize:CGSizeMake(CGRectGetWidth(self.bounds), yourCalculatedHeight)];
希望这会有所帮助, 保罗
【讨论】: