Как удалить ограничения, предложенные отладчиком в Visual Studio - PullRequest
0 голосов
/ 31 января 2019

Я боролся с ограничениями уже несколько недель, пока изучал Xamarin.iOS.

Я попытался поместить элемент searchBar в раскадровку и установить ограничения в портретном и ландшафтном режиме.Как только я думаю, что все правильно, я получаю следующие предупреждения в отладчике Visual Studio:

2019-01-30 22:43:43.200763+0000 App4[3113:24693] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. 
Try this: 
    (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 
(
"<_UILayoutSupportConstraint:0x600001378050 _UILayoutGuide:0x7fe7bf425640.height == 44   (active)>",
"<_UILayoutSupportConstraint:0x60000137a120 V:|-(0)-[_UILayoutGuide:0x7fe7bf425640]   (active, names: '|':UIView:0x7fe7bf425460 )>",
"<_UILayoutSupportConstraint:0x6000013780f0 _UILayoutGuide:0x7fe7bf525ce0.height == 34   (active)>",
"<_UILayoutSupportConstraint:0x6000013780a0 _UILayoutGuide:0x7fe7bf525ce0.bottom == UIView:0x7fe7bf425460.bottom   (active)>",
"<NSLayoutConstraint:0x600001362ad0 V:[_UILayoutGuide:0x7fe7bf425640]-(200)-[UISearchBar:0x7fe7bf421940]   (active)>",
"<NSLayoutConstraint:0x600001363a70 V:[UISearchBar:0x7fe7bf421940]-(200)-[_UILayoutGuide:0x7fe7bf525ce0]   (active)>",
"<NSLayoutConstraint:0x6000013787d0 'UIView-Encapsulated-Layout-Height' UIView:0x7fe7bf425460.height == 414   (active)>")

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600001363a70 V:[UISearchBar:0x7fe7bf421940]-(200)-[_UILayoutGuide:0x7fe7bf525ce0]   (active)>

Я понимаю, что мне нужно снять одно из этих ограничений, как это предложено отладчиком, но где я могу найтиэто в Visual Studio написано в коде?У меня только 4 ограничения, установленные в книжной ориентации, и 4 ограничения, установленные в альбомной ориентации, как показано ниже.Если я удалю одну из них через раскадровки, возникнут конфликты, говорящие о том, что не все ограничения установлены правильно.Как вы можете видеть на раскадровке, при переходе с устройства на устройство не возникает никаких конфликтов, однако, когда я имитирую любое устройство, переворачиваю его в горизонтальное положение и возвращаем обратно в «Портрет», элемент searchBar выскакивает на экране из егоначальная center позиция.Я предполагаю, что это поведение вызвано ограничениями, которые мне нужно удалить?Любое предложение будет высоко ценится, спасибо.

enter image description here

1 Ответ

0 голосов
/ 01 февраля 2019

Помимо удаления ограничений ландшафта, вы должны убедиться, что ваши ограничения правильно описывают, как вы хотите, чтобы представление было выложено и каков его размер.

Когда я могу, я избегаю даватьпросмотр любых явных ограничений размера (высота / ширина) и позволяет определить размер на основе позиционирования.

Чтобы отцентрировать панель поиска и убедиться, что она центрирована независимо от ориентации, вам нужно только определить следующие ограничения:

  1. Центрировать горизонтально в контейнере (где вид долженнаходиться по оси x)
  2. Центр по вертикали в контейнере (где представление должно быть по оси y)
  3. Начальное пространство от контейнера (какой должна быть ширина представления)

Первые два ограничения определяют положение x и y.Третье ограничение говорит iOS, что представление должно быть на расстоянии «х» от левого края экрана.Поскольку iOS знает, что представление должно быть центрировано по горизонтали (1-е ограничение) и иметь расстояние x от левого края (третье ограничение), оно может выяснить, насколько широким должно быть представление, чтобы удовлетворять обоим ограничениям одновременно.

Я поместил только эти три ограничения и получил следующий результат (анимированный GIF):

enter image description here

...