Добавление ограничения автоматического размещения программно превращает UIView в черный цвет.
Мне нужен контроллер представления без XIB. Должен быть веб-просмотр с полностью заполненным видом. Для этого я добавил следующий код в метод loadView.
- (void)loadView {
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
UIView *view = [[UIView alloc] initWithFrame:applicationFrame];
view.translatesAutoresizingMaskIntoConstraints = NO;
[view setBackgroundColor:[UIColor greenColor]];
[self setView:view];
// //create webview
self.webview = [[UIWebView alloc] initWithFrame:CGRectZero];
self.webview.translatesAutoresizingMaskIntoConstraints = NO;
[view addSubview:self.webview];
[self.webview setBackgroundColor:[UIColor orangeColor]];
[self.webview setDelegate:self];
NSDictionary *viewBindings = NSDictionaryOfVariableBindings(view,_webview);
// //add constraints
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_webview]|" options:0 metrics:nil views:viewBindings]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_webview]|" options:0 metrics:nil views:viewBindings]];
}
Но это превращает весь вид в черный. Если я комментирую [view addConstraints:...
метод вызывает его, показывая зеленый вид. Что не так с моим кодом?
2 ответа
Я считаю, что проблема заключается в том, что родительское представление не должно устанавливать translatesAutoresizingMaskIntoConstraints
ложно. Единственное представление, которое должно установить для этого атрибута значение false, - это то, к которому вы применяете автоматическое расположение, в данном случае webView. Если вы установите view.translatesAutoresizingMaskIntoConstraints
в ложь, то вы должны добавить ограничения view
,
Вам не нужно менять корневой вид UIViewController
вручную, может быть поэтому он не работает.
Мое предложение будет попробовать это:
- (void) viewDidLoad {
[super viewDidLoad];
self.webview = [[UIWebView alloc] init];
self.webview.translatesAutoresizingMaskIntoConstraints = NO;
[view addSubview:self.webview];
[self.webview setBackgroundColor:[UIColor orangeColor]];
[self.webview setDelegate:self];
NSDictionary *viewBindings = NSDictionaryOfVariableBindings(view,_webview);
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_webview]-0-|" options:0 metrics:nil views:viewBindings]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_webview]-0-|" options:0 metrics:nil views:viewBindings]];
// put a breakpoint after this line to see the frame of your UIWebView.
// It should be the same as the view
[self.view layoutIfNeeded];
}
Это должно работать и ваш UIWebView
должно быть на весь экран. Удачи!