美文网首页Ios@IONIC
动态改变UIWebView的高度

动态改变UIWebView的高度

作者: IT小妞儿 | 来源:发表于2015-12-19 18:55 被阅读668次
    • 需求

      • 界面由两部分构成,上部分显示图片,下部分显示文字,由于服务器是分开返回图片及HTML,并且滚动文字的时候,图片要跟随滚动
    • 解决方法

      • 通过UITableView展示图片及文字(主要是为了需求更改的时候,更改UITableView会更简单),这样就涉及到动态改变UIWebView的高度
    • 实现细节

    @interface PrizeDetailsViewController () <UIWebViewDelegate>
    @property (weak, nonatomic) IBOutlet UIWebView *webView;
    /**
     *  webViewH
     */
    @property (nonatomic, assign) CGFloat webViewH;
    @end
    
    @implementation PrizeDetailsViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
      
        [self setupUI];
    }
    
    - (void)setupUI {
        self.webView.backgroundColor = [UIColor clearColor];
        // 禁止webView滚动
        self.webView.scrollView.showsHorizontalScrollIndicator = NO;
        self.webView.scrollView.showsVerticalScrollIndicator = NO;
        self.webView.userInteractionEnabled = NO;
        self.webView.delegate = self;
        
        NSString *tmpStr = @"<h6>每个环境中有不同的bundleID、bundleName和app图标。这样做可以确保您可以直接识别安装在设备上的不同版本。也许更重要的是,它能够使我们在设备上有多个不同的版本,因为在每个环境中都有自己的bundleID</h6>";
    
        // 监听webView的contentSize改变的时候,更新tableView
        [self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
        [self.webView loadHTMLString:tmpStr baseURL:nil];
    }
    
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
        self.webViewH = [change[@"new"] CGSizeValue].height;
        [self.tableView reloadData];
    }
    
    // 添加了观察者,在控制器销毁的时候,一定要移除观察者
    - (void)dealloc {
        [self.webView.scrollView removeObserver:self forKeyPath:@"contentSize"];
    }
    
    #pragma mark webViewDelegate
    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        self.webViewH = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
        [self.tableView reloadData];
    }
    
    #pragma mark - tableView
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
        if (indexPath.row == 1) {
            return self.webViewH;
        }
        return [super tableView:tableView heightForRowAtIndexPath:indexPath];
    }
    @end
    

    remark: 以上代码仅是列出比较重要的步骤,各位大神们有什么好的意见,欢迎讨论

    相关文章

      网友评论

        本文标题:动态改变UIWebView的高度

        本文链接:https://www.haomeiwen.com/subject/nozphttx.html