将各种视图插入UIScrollView

时间:2009-04-21 16:07:58

标签: iphone cocoa

我们正在尝试为类似RSS的应用程序实现文章详细信息视图。窗口有一个UIScrollView,它包含一个UITextView(标题),一个UIButton(打开一个图库)和一个UIWebView(带有正文)。这个想法是所有这些元素一起滚动......

问题在于,每当我们身高超过1000像素时,该标记下方的所有内容都会被截断。我们听说这是因为这是视图的最大高度,并且由于Scroll由顶部的UIScrollView处理,因此无法看到更进一步的内容。

有人知道解决这个问题吗?

谢谢!

----更新1 ----

我们将身体分解成900px高的块,但是第一个之后的所有webview都显示没有内容......

UIScrollView *scroll=[[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
[scroll setBackgroundColor:[UIColor whiteColor]];
[scroll setCanCancelContentTouches:NO];
scroll.clipsToBounds = NO;  
scroll.indicatorStyle = UIScrollViewIndicatorStyleBlack;

//Título
CGRect tit =CGRectMake(5.0f, 0.0f, 315.f, 50.0f);
UILabel *titulo=[[UILabel alloc] initWithFrame:tit];
titulo.text=[itemNew objectForKey:@"titulo"];   
titulo.numberOfLines = 2;
titulo.font=[UIFont fontWithName:@"Helvetica" size:16.0f];
titulo.textColor=[self getColor:@"00336E"];
[scroll addSubview:titulo];
[titulo release];   

//Entradilla
float altura_entradilla=calcLabel([itemNew objectForKey:@"entradilla"], [UIFont boldSystemFontOfSize:16], 50, 315.0f);
CGRect ent_frame = CGRectMake(5.0f, 50.0f, 315.0f,altura_entradilla );
UILabel *entradilla=[[UILabel alloc] initWithFrame:ent_frame];
entradilla.text=[itemNew objectForKey:@"entradilla"];
entradilla.numberOfLines=4;
entradilla.font=[UIFont fontWithName:@"Helvetica" size:17.0f];
entradilla.textColor=[UIColor blackColor];
[scroll addSubview:entradilla];
[entradilla release];

NSString *cuerpo=[itemNew objectForKey:@"cuerpo"];

[scroll setContentSize:CGSizeMake(320.0f,40000.0f)];
[scroll setScrollEnabled:YES];  

webView = [[UIWebView alloc] initWithFrame:CGRectMake(5.0f, altura_entradilla+50, 315.0f, 900)];    
[webView loadHTMLString:cuerpo baseURL: [NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]];  
webView.detectsPhoneNumbers=NO;
webView.delegate=self;
[webView setScalesPageToFit:NO];
[scroll addSubview:webView];

webView.backgroundColor=[UIColor blackColor];
webView.userInteractionEnabled=NO;
[webView release];

if (altura_webview>900) {
   UIWebView *webView2 = [[UIWebView alloc] initWithFrame:CGRectMake(5.0f, altura_entradilla+50+900, 315.0f, 900)]; 
   [webView2 loadHTMLString:cuerpo baseURL: [NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]];  
   webView2.detectsPhoneNumbers=NO;
   webView2.delegate=self;
   [webView2 setScalesPageToFit:NO];
   [scroll addSubview:webView2];
   webView2.backgroundColor=[UIColor yellowColor];
   webView2.userInteractionEnabled=NO;
   [webView2 release];
}

self.view=scroll;

5 个答案:

答案 0 :(得分:1)

检查UIScrollview上的contentSize

我没有听说过1000点的限制(或者在我们的应用中看到更大的视图)。

答案 1 :(得分:0)

  1. 使用多个UIWebViews作为正文

  2. 您是否使用loadHTMLString向webView添加内容? 尝试loadRequest方法。使用loadRequest时,1024px没有问题

答案 2 :(得分:0)

我有同样的问题,我阅读并尝试了这个线程的一些提示,但是既没有通过loadHTMLString加载内容,也没有使用[_webView setNeedsDisplay]确实为我改变了一些东西。 (我应该尝试加载更多UIWebViews,但我很懒:)

我使用了scrollview委托进行了一次快速而又脏的修复,它完成了这个技巧:

@interface ArticleViewController : UIViewController <UIScrollViewDelegate> 

然后在init

中启动视图
_scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = _scrollView;
_scrollView.delegate = self;

并使用delgate的方法重绘webView,因为它显示

- (void) scrollViewDidEndDragging: (UIScrollView *) scrollView willDecelerate: (BOOL) willDecelerate
{
    CGRect frame = _webView.frame;
    frame.size = CGSizeMake(frame.size.width, frame.size.height + 1);
    _webView.frame = frame;
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{
    CGRect frame = _webView.frame;
    frame.size = CGSizeMake(frame.size.width, frame.size.height + 1);
    _webView.frame = frame;
}

答案 3 :(得分:0)

当你说:

  

我们已经尝试将身体分成几个900px高的webViews,但第二个,第三个等等被淘汰(你可以看到backgroundColor,但不是内容)......

在我看来,其他人已经遇到了这个问题(我再也找不到帖子),实际上UIWebviews似乎只使用了一个HTML解释器。这意味着如果一个UIWebView正在加载HTML内容,则其他UIWebView将不会加载任何内容。

要解决此问题,您需要使用UIWebView的委托方法:didFinishLoad,然后开始加载其他Web视图。

请注意,我不确定我在说什么,因为我自己没有尝试过,但这可能是一个解决方案。

答案 4 :(得分:0)

标记为答案的帖子在其最后评论中有一个链接。这是解决这个问题的方法。我有同样的问题,并调用[[webView _documentView] _webCoreNeedsDisplay];在那两位代表中解决了这个问题。干杯。