Я пытаюсь реализовать динамический макет с использованием ограничений автоопределения; для этой цели я создал 3 вида контейнеров. Первый - высота 49, гибкая ширина. Второй, который имеет ширину 320 и 320, а последний - ширину ширины 69. Итак, вот код, который должен помещать каждое представление под другим.Проблемы с автоопределением программ
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(searchControlsView, workArtView, playBackControlsContainer);
// Position time search controls
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[searchControlsView]|"
options:0
metrics:nil
views:viewsDictionary];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[searchControlsView]"
options:0
metrics:nil
views:viewsDictionary];
[self.view addConstraints:constraints];
// position workArt
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[workArtView]|"
options:0
metrics:nil
views:viewsDictionary];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[searchControlsView]-0-[workArtView]"
options:0
metrics:nil
views:viewsDictionary];
[self.view addConstraints:constraints];
// position bottom controls
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[playBackControlsContainer]|"
options:0
metrics:nil
views:viewsDictionary];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[workArtView]-(>=0)-[playBackControlsContainer]|" options:0 metrics:nil views:viewsDictionary];
[self.view addConstraints:constraints];
То, что я хочу достичь, это последний вид будет ниже 2-го один, если это возможно, если не третий вид будет выровнена в нижней части всего экрана и перекрытия 2-го. Однако третий вид (playBackControlsContainer) не отображается на экране.
К этому я удалил все ограничения из вида. Я пробовал несколько вещей, но я только начинаю с программных ограничений, и я не могу понять, где я терпит неудачу ... кроме того, что журнал отладки имеет много дополнительных представлений и без и идентификаторов для адресов каждого элемента управления, почему мой макет может быть неоднозначным. В этом случае полезен журнал отладки.
*<UIWindow:0xc1a6510> - AMBIGUOUS LAYOUT
| *<UILayoutContainerView:0xc1b6b50>
| | *<UITransitionView:0xc1a3da0>
| | | *<UIViewControllerWrapperView:0xc3b82b0>
| | | | *<UIView:0xc1b9830>
| | | | | *<UILayoutContainerView:0xc1ba6a0>
| | | | | | *<UINavigationTransitionView:0xc1bf490>
| | | | | | | *<UIViewControllerWrapperView:0xc1c5110>
| | | | | | | | *<UIView:0xb478820> - AMBIGUOUS LAYOUT
| | | | | | | | | *<UIView:0xb4f9d70> - AMBIGUOUS LAYOUT
| | | | | | | | | | *<UIButton:0xb4f3e40>
| | | | | | | | | | | <UIImageView:0xc4e7030>
| | | | | | | | | | *<UIButton:0xb4f5440>
| | | | | | | | | | | <UIImageView:0xc14b0a0>
| | | | | | | | | | | *<UIButtonLabel:0xb4fb610> - AMBIGUOUS LAYOUT
| | | | | | | | | | *<UIButton:0xb4f0e80>
| | | | | | | | | | | <UIImageView:0xc1f00b0>
| | | | | | | | | | | *<UIButtonLabel:0xb4fac70> - AMBIGUOUS LAYOUT
| | | | | | | | | | *<UIButton:0xb4f04f0>
| | | | | | | | | | | <UIImageView:0xc129480>
| | | | | | | | | | | *<UIButtonLabel:0xb4fa2e0> - AMBIGUOUS LAYOUT
| | | | | | | | | *<UIView:0xb478790>
| | | | | | | | | | *<UIImageView:0xb4f9b60>
| | | | | | | | | | *<LVStopWatchLabel:0xb479200>
| | | | | | | | | | | <UIImageView:0xb478920>
| | | | | | | | | *<UIView:0xb479940>
| | | | | | | | | | *<UIButton:0xb4f6ab0>
| | | | | | | | | | | <UIImageView:0xc4e6c00>
| | | | | | | | | | *<UILabel:0xb479db0>
| | | | | | | | | | *<UISlider:0xb4f5e90>
| | | | | | | | | | | <UIView:0xc4e05e0>
| | | | | | | | | | | | <UIView:0xc4e0760>
| | | | | | | | | | | | | <UIView:0xc4e0880>
| | | | | | | | | | | | <UIView:0xc4e5c40>
| | | | | | | | | | | <UIImageView:0xc4e67d0>
| | | | | | | | | | | | <UIImageView:0xc4e5d40>
| | | | | | | | | *<_UILayoutGuide:0xb478440> - AMBIGUOUS LAYOUT
| | | | | | | | | *<_UILayoutGuide:0xb4782a0> - AMBIGUOUS LAYOUT
| | | | | | <UINavigationBar:0xc1c4a10>
| | | | | | | <_UINavigationBarBackground:0xc1c7530>
| | | | | | | | <UIImageView:0xc1c7810>
| | | | | | | <UINavigationItemView:0xc4cf610>
| | | | | | | | <UILabel:0xc4dcae0>
| | | | | | | <UINavigationItemButtonView:0xc4dcf10>
| | | | | | | | <UILabel:0xc4dcfe0>
| | | | | | | <_UINavigationBarBackIndicatorView:0xc3c3880>
| | | | | <GADBannerView:0xc3de310>
| | | | | | <GADWebView:0xc3de440>
| | | | | | | <_UIWebViewScrollView:0xc3e01a0>
| | | | | | | | <UIWebBrowserView:0xd280600>
| | | | | <ADBannerView:0xc19ad20>
| | | | | | <ADRemoteView:0xc19cca0>
| | | | | | <UIView:0xc19d590>
| | <UITabBar:0xb4a47e0>
| | | <_UITabBarBackgroundView:0xc47db60>
| | | | <_UIBackdropView:0xc47d240>
| | | | | <_UIBackdropEffectView:0xc47e490>
| | | | | <UIView:0xc47e530>
| | | <UITabBarButton:0xc19ed40>
| | | | <UITabBarSwappableImageView:0xc17ee00>
| | | | <UITabBarButtonLabel:0xc19f170>
| | | <UITabBarButton:0xc1a4120>
| | | | <UITabBarSwappableImageView:0xc1a3570>
| | | | <UITabBarButtonLabel:0xc1a3e60>
| | | <UITabBarButton:0xc1a62b0>
| | | | <UITabBarSwappableImageView:0xc1a6660>
| | | | <UITabBarButtonLabel:0xc1a6390>
| | | <UITabBarButton:0xc1a8a30>
| | | | <UITabBarSwappableImageView:0xc1a9080>
| | | | <UITabBarButtonLabel:0xc1a8f60>
| | | <UIImageView:0xc47ead0>
Любая помощь в выяснении, что может быть причиной этого, я был бы очень благодарен. Спасибо.
Ну, высота и ширина ограничения добавляются с помощью интерфейса строитель каждого вида. Он должен быть там, даже если я удалю ограничения из супервизора. – Pablo
Хорошо, тогда мне нужна дополнительная информация. У меня нет полной картины ограничений в игре. Поскольку вы используете язык визуального формата, я думал, что макет был определен только кодом выше. – bilobatum