我正在从服务器下载文件并显示在ios设备中。文件类型可以是图像,pdf等任何类型,并且都可以正常加载。现在的问题是,文件或图像的某些部分隐藏在页面标题的后面。加载后,我想在文件顶部添加边距。
我编写的显示文件代码:
func openFile(file:String) {
let myBlog = file
let url = NSURL(string: myBlog)
let request = NSURLRequest(url: url! as URL)
webView.load(request as URLRequest)
self.view.addSubview(webView)
let pdfVC = UIViewController()
pdfVC.view.addSubview(webView)
pdfVC.title = "File"
self.navigationController?.pushViewController(pdfVC, animated: true)
self.navigationController!.navigationBar.tintColor = colors.whiteColor
}
我已经在类中创建了webView属性,例如:
var webView : WKWebView!
在viewDidLoad()中,我写了:
webView = WKWebView(frame: self.view.frame)
webView.translatesAutoresizingMaskIntoConstraints = false
webView.isUserInteractionEnabled = true
webView.navigationDelegate = self
结果我得到:
图片的某些部分位于标题的后面。我尝试了链接add margins in swift中给出的各种解决方案,但是没有任何效果。
最佳答案
我的建议是在需要显示它的控制器中创建WKWebView
实例,在本例中为pdfVC
可以有模型,例如:
enum FileType {
case image(fileURL: URL)
case pdf(fileURL: URL)
}
创建
FileViewController
的情况并为其分配fileTypefunc openFile(file:String) {
let pdfViewController = FileViewController()
pdfVC.fileType = FileType.pdf(fileURL: URL(string: "https://www.google.com")!) // example
pdfVC.title = "File"
navigationController?.pushViewController(pdfVC, animated: true)
}
在
VC
内部,您需要显示文件:这样,即使您有
navigationBar
,您也不会遇到navigationBar
和topMargin
的问题class FileViewController: UIViewController {
var fileType: FileType!
override func viewDidLoad() {
super.viewDidLoad()
var urlRequest: URLRequest!
switch fileType {
case .image(let url), .pdf(let url):
urlRequest = URLRequest(url: url)
@unknown default:
break
}
let webView = WKWebView(frame: view.frame)
webView.load(urlRequest)
self.view = webView
}
}
希望对您有所帮助!