2016-04-15 21 views
0

私はヘッダとフッタ(どちらもUIViews)を追加しようとしていますが、何らかの理由でフッタが底にくっついています。私はコンテンツサイズを見るためにKVOメソッドを使用しています。uiwebview with header and footer

私はここで私は問題だと思う方法で提示しています:

- (void)updateLayout 
{ 
    // Update the frame of the header view so that it scrolls with the webview content 
    CGRect newHeaderFrame = self.headerView.frame; 
    CGRect newFooterFrame = self.footerView.frame; 

    newHeaderFrame.origin.y = -CGRectGetMinY([self.webView convertRect:self.innerHeaderView.frame toView:self.webView.scrollView]); 
    newFooterFrame.origin.y = self.webView.scrollView.contentSize.height; 

    [self.headerView setFrame:newHeaderFrame]; 
    [self.footerView setFrame:newFooterFrame]; 

    if ([self didTapToFullScreen]) 
    { 
     // The delegate was already called in this case, in the tap gesture callback method 
     return; 
    } 

    BOOL fullScreen = (newHeaderFrame.origin.y < 0); 
    if (([self isZooming] && [self didSwitchToFullScreen]) || (fullScreen == [self isFullScreen])) 
    { 
     return; 
    } 

    [self setSwitchToFullScreen:fullScreen]; 
    [self setFullScreen:fullScreen]; 

    // Call the delegate for the full screen 
    [self.fullScreenDelegate emailView:self showFullScreen:fullScreen]; 
} 

Here's the full project

私はUIWebViewの底にフッターを配置することができますどのように?

+0

自動レイアウトを使用している場合、フレームではなく制約を更新する必要があります。ビューをWebビューの下部に固定しましたが、フレームを画面外に設定しています。フレームは設定されますが、レイアウトエンジンはウェブビューの最下部に固定する必要があると判断し、ちらつきが生じ、ビューが急速に前後にジャンプします。また、 'newFooterFrame.origin.y = self.webView.scrollView.contentSize.height;'は、Webビューのスクロールビューの一番下にあるフッタービューのフレームを完全にオフスクリーンに設定します。ビューが画面上に表示される前に、その行を呼び出します。これはあなたの意図ですか? – beyowulf

+0

https://github.com/protectedtrust/UIWebView-with-Header-and-Footer – bikram990

+0

@ bikram990を使用することができます。ありがとうございました。既に試しました。参考:私はすでに適切なリポジトリ(https://github.com/alexszilagyi/HeaderWebView)を作成してこれを作成しようとしました –

答えて

0

UIWebViewスクロールビューでビューを設定し、オフセットでフィドルを設定できます。オフセットマイナスにはならないでしょうし、次にヘッダビュー:

@interface ViewController()<UIWebViewDelegate> 
@property (weak, nonatomic) IBOutlet UIWebView *webView; 
@property (nonatomic, strong) UIView *headerView; 
@property (nonatomic,strong) UIView *footerView; 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.headerView = [[UIView alloc] initWithFrame:CGRectMake(0, -100, [UIScreen mainScreen].bounds.size.height, 100)]; 
    self.headerView.backgroundColor = [UIColor blueColor]; 
    self.footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; 
    self.footerView.backgroundColor = [UIColor yellowColor]; 


    NSString *urlText = @"http://stackoverflow.com/questions/15921974/how-to-load-url-on-launch-in-a-webview-osx-project"; 
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlText]]]; 
    self.webView.delegate = self; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark - WebView delegate 

-(void) webViewDidFinishLoad:(UIWebView *)webView { 
    self.webView.scrollView.contentInset = UIEdgeInsetsMake(100.0,0.0,100.0,0.0); 


    if(![self.headerView superview]) 
    { 
     [webView.scrollView addSubview:self.headerView]; 
     [webView.scrollView bringSubviewToFront:self.headerView]; 
    } 

    NSString *result = [webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"]; 

    NSInteger height = [result integerValue]; 

    self.footerView.frame = CGRectMake(0, height, [UIScreen mainScreen].bounds.size.height, 100); 

    if(![self.footerView superview]) 
    { 
     [webView.scrollView addSubview:self.footerView]; 
     [webView.scrollView bringSubviewToFront:self.footerView]; 
    } 

    [self.webView.scrollView setContentOffset: 
    CGPointMake(0, -self.webView.scrollView.contentInset.top) animated:NO]; 
} 


@end 

別のオプションは、HTML(「100pxにマージントップ」)にトップのパディングを追加することです。