iOS开发踩坑记录

开屏页无法显示图片问题

LaunchScreen.storyboard设置Assets.xcassets里的图片无法显示。解决办法是把图片放到外面,工程目录下建个文件夹,把图片放里,而不是在Assets.xcassets里。

后来发现其实不是这个问题,把图片放在外面有时候也会不显示。重启手机再重新build安装就会显示。无论是放在Assets.xcassets里还是外面,都会显示。不知道是否和auto layout有关,把UIImageView设为水平居中、竖直居中、距上边距0、左边距0。

开屏页国际化问题

对LaunchScreen.storyboard国际化似乎不起作用,对LaunchScreen里显示的图片做国际化,似乎也没起作用。解决办法是创建需要本地化的LaunchScreen.storyboard,命名为LaunchScreenZhCN.stroyboard。修改InfoPlist.strings,对UILaunchStoryboardName国际化,值为对应的LaunchScreen名。

但是运行过程中发现,开屏页确实本地化了,但是切换语言,开屏页并没有变化。网上找到的解答是:

启动页只会保留一份, 也就是说, 你第一次加载完以后, 切换了语言, 再重新打开App, 它的启动页不会跟着更新的。 这也符合苹果的用户交互指引。

也就是说,开屏页的语言为安装APP时系统语言,其后更改系统语言也不会改变开屏页,除非重新安装。

参考:

https://www.jianshu.com/p/605978f28629

http://blog.hudongdong.com/ios/559.html

国际化思维导图
WKWebView使用问题

在storyboard里使用WKWebView会报错,提示Class Unavailable: WKWebView before iOS 11.0 (NSCoding support was broken in previous versions)

实际上在iOS8.0就开始支持WKWebView了,那为什么还会报错呢?

网上的解答是:

Although WKWebView was introduced in iOS 8, there was a bug in -[WKWebView initWithCoder:] that was only fixed in iOS 11, which always crashed at runtime and thus prevented configuring one within Interface Builder.

意思好像是虽然从iOS8开始支持,但是有个bug直到iOS11才修复,如果iOS11之前使用Interface Builder创建WKWebView会导致崩溃。

所以解决办法是通过代码创建WKWebView。

import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {

    var webView: WKWebView!

    override func loadView() {
        super.loadView()
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        let myURL = URL(string: "https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }}

参考:

https://stackoverflow.com/questions/46221577/xcode-9-gm-wkwebview-nscoding-support-was-broken-in-previous-versions

http支持

编辑info.plist,增加

	<key>NSAppTransportSecurity</key>
	<dict>
	    <key>NSAllowsArbitraryLoads</key>
	    <true/>
	    <key>NSAllowsArbitraryLoadsInWebContent</key>
  	    <true/>
	</dict>

参考:

https://stackoverflow.com/questions/41557155/wkwebview-how-to-display-links-to-http-pages

https://stackoverflow.com/questions/52258827/ios-wkwebview-doesnt-load-http-web-content

发表评论

电子邮件地址不会被公开。 必填项已用*标注