У меня есть сегментированный элемент управления в (вертикальном) виде стека, и я хочу, чтобы его передние и задние края имели некоторое расстояние от левой и правой границ вида стека.
Я попытался определить ограничение ширины, чтобы сделать это, и попытался использовать конечные и ведущие ограничения пространства, но во время выполнения они нарушаются, поскольку система не может "одновременно удовлетворять ограничениям".Из консоли довольно ясно, что представляют собой конфликтующие ограничения, но я не добавил (см. Рис. Ниже) те, которые связывают сегментированный элемент управления с левым и правым краем его контейнера UIStackView, поэтому я не знаю, как избавиться от него.из них.Система нарушает ограничение, которое я хочу сохранить.
Мне должно быть ясно, что я не обязательно требую ограничения ширины для UISegmentedControl - трейлинг и ведущие пробелы также будут служить.Чтобы быть совершенно ясным, мне нужно иметь возможность контролировать ширину сегментированного элемента управления.
Обратите внимание на $ WIDTH-SEGCTRL в выводе консоли ниже.Это из идентификатора, который я определил в ограничении в Интерфейсном Разработчике.
2018-11-29 10:43:56.323503-0600 [21479:18697482] [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.
(
"<NSLayoutConstraint:0x604000291440 H:[UIStackView:0x7f96373120d0]-(0)-| (active, names: '|':SectionHeaderView:0x7f9637311e20 )>",
"<NSLayoutConstraint:0x6040002985b0 H:|-(0)-[UIStackView:0x7f96373120d0] (active, names: '|':SectionHeaderView:0x7f9637311e20 )>",
"<NSLayoutConstraint:0x6000004913f0 '$WIDTH-SEGCTRL' UISegmentedControl:0x7f9637312d90.width == 280 (active)>",
"<NSLayoutConstraint:0x60400029af90 '_UITemporaryLayoutWidth' SectionHeaderView:0x7f9637311e20.width == 320 (active)>",
"<NSLayoutConstraint:0x604000486720 'UISV-alignment' UIStackView:0x7f96373122d0.leading == UISegmentedControl:0x7f9637312d90.leading (active)>",
"<NSLayoutConstraint:0x604000486770 'UISV-alignment' UIStackView:0x7f96373122d0.trailing == UISegmentedControl:0x7f9637312d90.trailing (active)>",
"<NSLayoutConstraint:0x604000486680 'UISV-canvas-connection' UIStackView:0x7f96373120d0.leading == UIStackView:0x7f96373122d0.leading (active)>",
"<NSLayoutConstraint:0x6040004866d0 'UISV-canvas-connection' H:[UIStackView:0x7f96373122d0]-(0)-| (active, names: '|':UIStackView:0x7f96373120d0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x6000004913f0 '$WIDTH-SEGCTRL' UISegmentedControl:0x7f9637312d90.width == 280 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Ниже приведены фотографии до и после добавления ограничения ширины, которое создает проблему.Вы можете видеть, что Xcode рассматривает ограничение ширины 280 как что-то, что он не может выполнить.Он считает сегментированный элемент управления привязанным к краям, но я не могу понять, почему.
До:
После: