在UIWebView上添加头部视图和尾部视图

公司有需求展示一个h5界面,使用UIWebView和WKWebView比较好的选择,但是要求下面要添加几个分享的按钮,试了以下几种方法
方法一.用tableView的头展示h5,尾部添加几个分享按钮,结果尾部总是不能和整个界面同起同落。
方法二.在UIWebView的webViewDidFinishLoad方法执行时添加顶部和底部,并对UIWebViewScrollView中的UIWebBrowserView重新布局。

分析UIWebView的层次结构

//UIWebView中的层次 UIWebView -->_UIWebViewScrollView--UIWebBrowserView

for (UIView *view in self.webView.subviews) {
    NSLog(@"111  %@",view);
}
for (UIView *view in self.webView.scrollView.subviews) {
    NSLog(@"222  %@",view);
} 

截图

UIWebView层次.jpeg

下面是代码

  #import "SHWebViewWithFooterController.h"
  @interface SHWebViewWithFooterController ()<UIWebViewDelegate,UIScrollViewDelegate>
  @property (nonatomic, strong) UIWebView *webView;
//遮盖
@property (nonatomic, strong) UILabel *loadingView;
//底部添加的视图
@property (nonatomic,strong)UIControl *bottomView;
@end

@implementation SHWebViewWithFooterController

- (void)viewDidLoad {
[super viewDidLoad];

self.webView = [[UIWebView alloc]init];
self.webView.backgroundColor = [UIColor clearColor];
self.webView.delegate= self;
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.wercraft.top/yqp-images/pc_page/news/070010EE3A1EF13E2AE4D70A060CD122.jsp"]]];
self.webView.scrollView.delegate = self;

self.webView.frame = CGRectMake(0, [UIApplication sharedApplication].statusBarFrame.size.height + self.navigationController.navigationBar.bounds.size.height, self.view.bounds.size.width,self.view.bounds.size.height-([UIApplication sharedApplication].statusBarFrame.size.height + self.navigationController.navigationBar.bounds.size.height));
[self.view addSubview:self.webView];

//不想引入框架增加工程大小 随便写的遮盖
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
self.loadingView = [UILabel new];
self.loadingView.text = @"正在加载...";
self.loadingView.textAlignment= NSTextAlignmentCenter;
self.loadingView.backgroundColor = [UIColor yellowColor];
CGRect frame = CGRectMake(0,[UIApplication sharedApplication].statusBarFrame.size.height + self.navigationController.navigationBar.bounds.size.height, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - self.navigationController.navigationBar.bounds.size.height - [UIApplication sharedApplication].statusBarFrame.size.height);
self.loadingView.frame = frame;
[keyWindow addSubview:self.loadingView];

}
#pragma mark - 监听到加载成功后添加
- (void)webViewDidFinishLoad:(UIWebView *)webView
{

CGSize contentSize = self.webView.scrollView.contentSize;
float topHeight = 100;
float bottomHeight = 200;

//顶部视图
UIView *topView  = [UIView new];
topView.frame = CGRectMake(0, 0, self.view.bounds.size.width, topHeight);
topView.backgroundColor = [UIColor greenColor];
[self.webView.scrollView addSubview:topView];

//重新设置展示网页的frame
UIView *innerWebView = self.webView.scrollView.subviews.firstObject;
CGRect frame = innerWebView.frame;
frame.origin.y = CGRectGetMaxY(topView.frame);
innerWebView.frame = frame;

//添加底部视图
self.bottomView = [[UIControl alloc]init];
[self.bottomView addTarget:self action:@selector(addViewHeight) forControlEvents:UIControlEventTouchUpInside];
self.bottomView.backgroundColor = [UIColor redColor];
self.bottomView.frame = CGRectMake(0, contentSize.height + topHeight, self.view.bounds.size.width, bottomHeight);
self.webView.scrollView.contentSize = CGSizeMake(contentSize.width, contentSize.height + topHeight + bottomHeight);
[self.webView.scrollView addSubview:self.bottomView];

[self.loadingView removeFromSuperview];
}
#pragma mark - 改变底部视图高度
static float addHeight = 20;
- (void)addViewHeight
{

self.bottomView.frame = CGRectMake(0, CGRectGetMinY(self.bottomView.frame), self.view.bounds.size.width, self.bottomView.frame.size.height + addHeight);
self.webView.scrollView.contentSize = CGSizeMake(self.webView.scrollView.contentSize.width, self.webView.scrollView.contentSize.height + addHeight);
}
- (void)dealloc
{
    if (self.loadingView)
{
    [self.loadingView removeFromSuperview];
}
}
@end

有好的意见建议下面留言,谢谢

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,095评论 25 709
  • 一、WebView WebView就是一个内嵌浏览器控件,在iOS中主要有两种WebView:UIWebView和...
    iOS祎阅读 4,822评论 0 2
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,626评论 4 61
  • 这两天公司下发了企业文化让大家贯彻学习,并要求学习的新人课后上交一份心得感悟。 昨天大群中人事上传了十几份新人写的...
    商小楼阅读 3,218评论 0 1
  • 原生活 新生活,新主张,新概念 生活本是一次疯狂的旅程 没有尽头 没有出口 任尔东西南北 心梦 一次说走就走的旅行...
    思想者风阅读 2,924评论 0 1

友情链接更多精彩内容