вставка различных видов в UIScrollView - PullRequest
0 голосов
/ 21 апреля 2009

мы пытаемся реализовать подробный вид статьи для RSS-подобного приложения. В окнах есть UIScrollView, который содержит UITextView (который является заголовком), UIButton (который открывает галерею) и UIWebView (с телом). Идея состоит в том, что все эти элементы прокручиваются вместе ...

Проблема в том, что всякий раз, когда у нас тело ростом более 1000 пикселей, все, что ниже этой отметки, усекается. Мы слышали, что это потому, что это максимальная высота для представления, и поскольку прокрутка обрабатывается верхним UIScrollView, нет способа увидеть, что будет дальше.

Кто-нибудь знает способ обойти это?

Спасибо!

---- обновление 1 ----

Мы разбили тело на фрагменты высотой 900px, но все веб-просмотры после первого не показывают контента ...

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 ]

1 голос
/ 22 апреля 2009

отметьте contentSize в вашем UIScrollview.

Я не слышал о пределе в 1000 пунктов (или видел его в более крупных видах, которые есть в нашем приложении).

0 голосов
/ 23 июля 2009

Сообщение, помеченное как ответ, содержит ссылку в своем последнем комментарии. Это решение этой проблемы. У меня была такая же проблема, и я вызывал [[webView _documentView] _webCoreNeedsDisplay]; в этих двух делегатах это решено. Приветствия.

0 голосов
/ 06 июня 2009

Когда вы говорите:

Мы попытались разбить тело на несколько веб-представлений высотой 900px, но второе, третье и т. Д. Отключились (вы можете видеть backgroundColor, но не содержимое) ...

Мне кажется, что другие люди сталкивались с этой проблемой (я не могу найти сообщения снова), на самом деле UIWebviews, кажется, использует только одного интерпретатора HTML. Это означает, что если один UIWebView загружает контент HTML, другие UIWebView ничего не загружают.

Чтобы решить эту проблему, вам нужно использовать методы делегирования UIWebView: didFinishLoad и после этого начать загрузку других веб-просмотров.

Пожалуйста, имейте в виду, что я не уверен в том, что говорю, потому что я сам не пробовал, но это может быть решением.

0 голосов
/ 03 июня 2009

У меня была та же проблема, и я прочитал и попробовал несколько советов этой темы, но ни загрузка контента через 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;
}
0 голосов
/ 21 апреля 2009
  1. Использование более одного UIWebViews в качестве тела

  2. Используете ли вы loadHTMLString для добавления контента в webView? Попробуйте метод loadRequest. Нет проблем с 1024px при использовании loadRequest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...