С Xcode 8 это теперь возможно, но средства достижения этого, мягко говоря, немного хакерские. Но эй, рабочее решение - это рабочее решение, верно? Позволь мне объяснить.
WKWebView initWithCoder: больше не аннотируется как «NS_UNAVAILABLE». Теперь это выглядит так, как показано ниже.
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
Начните с создания подкласса WKWebView и переопределите initWithCoder. Вместо вызова super initWithCoder вам потребуется использовать другой метод инициализации, например initWithFrame: configuration :. Быстрый пример ниже.
- (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, чтобы WKWebView более внимательно следил за поведением UIWebView в этом отношении.