2016-04-15 3 views
0

Я пытаюсь добавить верхний и нижний колонтитулы (оба из них как UIViews), но по какой-то причине мой нижний колонтитул придерживается нижней части, я использую метод для просмотра моего размера содержимого.uiwebview с заголовком и нижним колонтитулом

Я представляю здесь метод, где я думаю, что проблема:

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

Если вы используете автоматическую компоновку, вам следует обновлять ограничения, а не фреймы. Вы привязали представление к нижней части веб-представления, но вы устанавливаете рамку на экран. Рамка устанавливается, но движок компоновки считает, что он должен быть закреплен на нижней части веб-представления, следовательно, мерцание, представление быстро прыгает назад и вперед. Кроме того, 'newFooterFrame.origin.y = self.webView.scrollView.contentSize.height;' будет устанавливать рамку представления нижнего колонтитула полностью вне экрана в нижней части прокрутки веб-представления. Вы вызываете эту строку перед представлением на экране. Это то, что вы намерены? – beyowulf

+0

вы можете использовать https://github.com/protectedtrust/UIWebView-with-Header-and-Footer – bikram990

+0

@ bikram990: Спасибо, уже попробовал это. FYI: Я уже пытался это сделать, разворачивая [соответствующее репо] (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»), а затем представления заголовка не будет в минус смещение.

Смежные вопросы