Xcode 8ではこれが可能になりましたが、それを達成する手段は控えめに言っても少し厄介です。しかし、ねえ、実用的なソリューションは実用的なソリューションですよね?説明させてください。
WKWebViewのinitWithCoder:は「NS_UNAVAILABLE」として注釈されなくなりました。次のようになります。
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
WKWebViewをサブクラス化して開始し、initWithCoderをオーバーライドします。スーパーinitWithCoderを呼び出す代わりに、initWithFrame:configuration:などの別のinitメソッドを使用する必要があります。以下の簡単な例。
- (instancetype)initWithCoder:(NSCoder *)coder
{
// An initial frame for initialization must be set, but it will be overridden
// below by the autolayout constraints set in interface builder.
CGRect frame = [[UIScreen mainScreen] bounds];
WKWebViewConfiguration *myConfiguration = [WKWebViewConfiguration new];
// Set any configuration parameters here, e.g.
// myConfiguration.dataDetectorTypes = WKDataDetectorTypeAll;
self = [super initWithFrame:frame configuration:myConfiguration];
// Apply constraints from interface builder.
self.translatesAutoresizingMaskIntoConstraints = NO;
return self;
}
ストーリーボードで、UIViewを使用して、新しいサブクラスのカスタムクラスを割り当てます。残りは通常のビジネスです(自動レイアウト制約の設定、ビューをコントローラーのアウトレットにリンクするなど)。
最後に、WKWebViewはコンテンツをUIWebViewとは異なる方法でスケーリングします。多くの人々は、WKWebViewがこの点に関してUIWebViewの動作をより厳密にするためにUIWebViewが行うように、コンテンツをスケーリングして同じ倍率でレンダリングすることから、Suppress WKWebViewの簡単なアドバイスに従いたいと思うでしょう。