我有一个UIWebView,内容不同(单页).我想找出第CGSize个内容,以便适当调整父视图的大小.不幸的是,显而易见的-sizeThatFits:只返回WebView的当前帧大小.

推荐答案

事实证明,我第一次猜测使用-sizeThatFits:并不是完全错误的.这似乎是可行的,但前提是webView的框架在发送-sizeThatFits:之前设置为最小尺寸.之后,我们可以通过合适的尺寸来纠正错误的框架尺寸.这听起来很糟糕,但实际上没那么糟糕.因为我们两个帧都会在彼此之后进行更改,所以视图不会更新,也不会闪烁.

当然,我们必须等到内容加载完毕,所以我们将代码放入-webViewDidFinishLoad:委托方法中.

Obj-C

- (void)webViewDidFinishLoad:(UIWebView *)aWebView {
    CGRect frame = aWebView.frame;
    frame.size.height = 1;
    aWebView.frame = frame;
    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    aWebView.frame = frame;

    NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
}

Swift 4.x

func webViewDidFinishLoad(_ webView: UIWebView) {
    var frame = webView.frame
    frame.size.height = 1
    webView.frame = frame
    let fittingSize = webView.sizeThatFits(CGSize.init(width: 0, height: 0))
    frame.size = fittingSize
    webView.frame = frame
}

我应该指出有another approach个(感谢@GregInYEG)使用JavaScript.不确定哪种解决方案性能更好.

在两个黑客解决方案中,我更喜欢这个.

Ios相关问答推荐

如何加密字符串使用AES. GCM在Dart和解密相同的Swift?

UIImage大小调整工作,但转换为上传数据时恢复到原始大小

Nomb iOS 17.4.0中崩溃

SwiftUI Divider过大了其父视图

RealityKit – ARView 光线投射返回 0 个结果

从iOS键盘输入时Flutter TextField输入消失

如何在 SwiftUI 的 TabView 中添加底部曲线?

使用 @MainActor 更新 UI 的适当策略是什么?

如何使用情节提要重新排列 UITabBarController 项目?

UICollectionView - 动态单元格高度?

UITableView 页脚,停止浮动内容

在主线程上发布 NSNotification

在 Swift 中上传带参数的图像

正确的领域使用模式/最佳实践?

用户拒绝使用后如何提示用户打开位置服务

Swift 将 unix 时间转换为日期和时间

如何在 UILabel 中找到文本子字符串的 CGRect?

无法加载从带有标识符的包中的笔尖引用的图像

使用 Xcode 的 All Exceptions 断点时忽略某些异常

Swift:如何在设备旋转后刷新 UICollectionView 布局