-
需求
- 界面由兩部分構(gòu)成个粱,上部分顯示圖片,下部分顯示文字翻翩,由于服務器是分開返回圖片及HTML都许,并且滾動文字的時候稻薇,圖片要跟隨滾動
-
解決方法
- 通過UITableView展示圖片及文字(主要是為了需求更改的時候,更改UITableView會更簡單)胶征,這樣就涉及到動態(tài)改變UIWebView的高度
實現(xiàn)細節(jié)
@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>每個環(huán)境中有不同的bundleID塞椎、bundleName和app圖標。這樣做可以確保您可以直接識別安裝在設備上的不同版本睛低。也許更重要的是忱屑,它能夠使我們在設備上有多個不同的版本,因為在每個環(huán)境中都有自己的bundleID</h6>";
// 監(jiān)聽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: 以上代碼僅是列出比較重要的步驟急波,各位大神們有什么好的意見从铲,歡迎討論