inserting various views into UIScrollView

不羁的心 提交于 2020-01-03 06:07:22

问题


we're trying to implement an article detail view for an RSS-like application. The windows has a UIScrollView that contains a UITextView (which is the title), a UIButton (which opens a gallery), and a UIWebView (with the body). The idea is that all these elements scroll together...

The problem is that whenever we have a body over 1000px tall, everything below that mark is truncated. We've heard that this is because that is the maximum height for a view, and since the Scroll is handled by the top UIScrollView, there is no way to see what's further down.

does anybody know a way around this?

Thanks!

---- update 1 ----

We've broken up the body into 900px-high chunks, but all webviews after the first one show no content...

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;

回答1:


  1. Use more then one UIWebViews as body

  2. Are you using loadHTMLString to add content to webView? Try loadRequest method. There is no problem with 1024px when you are using loadRequest




回答2:


check the contentSize on your UIScrollview.

I've not heard of a 1000 point limit (or seen it in bigger views I have in our app).




回答3:


I had the same problem and I read and tried a few tips of this thread, but neither loading the content via loadHTMLString, nor using [_webView setNeedsDisplay] did changed anything for me. (I should try loading more UIWebViews, but I'm lazy:)

I used a quick and dirty fix using the scrollview delegate, which did the trick:

@interface ArticleViewController : UIViewController <UIScrollViewDelegate> 

then fire up the view in init

_scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = _scrollView;
_scrollView.delegate = self;

and use the delgate's method to redraw the webView as it shows up

- (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;
}



回答4:


When you say :

We've tried breaking the body into several 900px-high webViews, but the second, third, etc. get blanked out (you can see the backgroundColor, but not the content)...

It seems to me that other persons have met this issue (I can't find the posts again), in fact UIWebviews seems to use only one HTML Interpreter. Meaning that if one UIWebView is loading HTML Content, others UIWebView won't load anything.

To solve that, you need to use UIWebView's delegate methods : didFinishLoad, and start loading the other webviews after that.

Please be aware that I'm not sure about what I'm saying, because I did not try it myself, but it might be a solution.




回答5:


The post marked as the answer has a link in it's last comment. That is the solution to this problem. I had this very same problem, and invoking [[webView _documentView] _webCoreNeedsDisplay]; in those 2 delegates solved it. Cheers.



来源:https://stackoverflow.com/questions/773386/inserting-various-views-into-uiscrollview

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!