我需要在iOS上创建一个可滚动的复合视图。也就是说,视图将包含至少一个图像,可能是一个按钮,以及一些文本(我们可能希望用粗体字格式等)。数据量,特别是文本量,是可变的,从4行到100行。数据在某种程度上是“可变的”,特别是图像和文本不会在时尚界加入。
这一切都需要适合只有纵向布局的大约280h x 115w像素的“窗格”。
单个UITextView不提供显示图像或格式化文本的工具。
UIWebView提供了显示图像和格式化文本的功能,但按钮是一个问题(甚至不确定它是否可行)。
UIScrollView可以轻松地允许图像和按钮,然后UIWebView可以嵌入到文本的滚动视图中,但滚动成为一个问题 - 我希望整个视图滚动为一个,没有调整Web视图的大小以包含它的内容,并且不会在可滚动内部混淆可滚动(doc警告“意外行为”)。
(我猜你的想法是我想要的太多了。)
那么,有什么建议吗?什么是接近我需要的最佳方式?
答案 0 :(得分:1)
在iOS5中,UIWebView有一个scrollView属性,这是一个普通的UIScrollView。您应该能够将UIButton添加为scrollView的子视图以实现您的目标,尽管正确定位可能是一个挑战。在iOS5之前,你可以循环浏览UIWebView的子视图,找到带有isKindOfClass的UIScrollView ......
答案 1 :(得分:0)
当我做了类似的事情时,我有十几个视图,我添加到UIScrollView,然后计算所有视图的帧。当然,这是一项非常繁琐的工作,因为有些观点可能会在各种条件下隐藏起来。布局代码实际上非常简单,从上到下布置视图,但很难看。结果是它的魅力,快速而可靠。你甚至可以将它简单地包装在动画块中。
答案 2 :(得分:0)
我建议您使用UIWebView
内的UIScrollView
进行测试。我没有看到iOS 5.0模拟器中的任何干扰。我不知道iOS 4.0中是否存在问题。
如果您发现存在干扰,可以通过在网址或代码中将网络视图的userInteractionEnabled
属性设置为NO来阻止它。这将阻止Web视图接收任何触摸,因此用户也无法对其进行缩放,跟踪其中的链接或从中复制文本。
在网络视图的委托中,实施webViewDidFinishLoad:
以设置网络视图的大小和滚动视图的contentSize
。例如:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
CGRect frame = self.webView.frame;
frame.size = [self.webView sizeThatFits:CGSizeMake(frame.size.width, HUGE_VALF)];
self.webView.frame = frame;
self.scrollView.contentSize = CGSizeMake(CGRectGetMaxX(frame), CGRectGetMaxY(frame));
}