XCODE: фон UIView не отображается на экране, хотя я установил цвет в раскадровке и программно

#ios #swift #xcode #uiview #background-color

#iOS #swift #xcode #пользовательский интерфейс #background-color

Вопрос:

У меня есть UIView, который я вставил в свой ViewController, просто чтобы немного упорядочить, и я пытаюсь установить цвет фона на этот пользовательский синий, который у меня есть. Я установил цвет фона в инспекторе идентификации и программно:

 searchRadiusView.backgroundColor = #colorLiteral(red: 0.00859087177, green: 0.09247856156, blue: 1, alpha: 1)
  

Я установил это в своем viewDidLoad. Вот изображение раскадровки, на котором фон пользовательского интерфейса отображается как правильный цвет:

Вот как выглядит представление в моем симуляторе:

Просто чтобы уточнить, синий цвет за меткой «Радиус поиска (mi.)» — это просто цвет фона метки. Есть идеи, почему в представлении не отображается цвет и как это исправить? Спасибо

Комментарии:

1. Похоже, что в ваших ограничениях есть проблема.

2. если он красный, это означает, что есть проблема? есть ли способ определить проблему?

3. Я думаю, что были необходимы ограничения centerX, centerY.

4. где мне установить эти ограничения?

Ответ №1:

Я понятия не имею, почему этот UIView дал мне так много ошибок ограничения (я новичок в UIViews, так что, возможно, это типично), но я решил просто придать каждому элементу внутри представления постоянную ширину и высоту и закрепить каждую из четырех сторон на расстоянии, на котором они находились. Затем я установил ограничение фактического пользовательского интерфейса, которое я хотел, и все ошибки исчезли, и появился мой цвет. По какой-то причине мне пришлось сохранить все постоянным, что остановит изменение размера представления в зависимости от типа телефона. Это может быть хорошо или плохо, в зависимости от того, как вы на это смотрите.

Ответ №2:

Вы можете установить ограничения автоматической компоновки в раскадровке (или для тех, кто работает в Xcode достаточно долго, IB). Кроме того, вы можете сделать это с помощью прямого кода.

Две вещи, которые следует помнить.

  • Для всех представлений нужны две вещи — размер и положение.

Положение может быть относительно экрана или другого вида и обычно описывается в терминах «X и Y». Но они могут быть любыми сверху, снизу, впереди, в конце, по центру X и по центру Y. Пока вы определяете уникальную точку X / Y для представления (акцент на уникальности), механизм компоновки будет знать, где ее разместить.

  • Некоторые виды имеют собственный размер.

Размер — это (очевидно) ширина и высота. Давайте рассмотрим три типа представлений. Текстовое поле, метка и слайдер. Текстовое поле должно иметь четко определенную ширину и высоту. Слайдеру нужна ширина, но вы действительно не можете задать ему высоту. Эти два довольно легко увидеть.

Это ярлыки (а иногда и кнопки), которые может быть сложнее понять, когда вы просто изучаете автоматическую компоновку. Они имеют так называемый внутренний размер.

Допустим, у вас есть метка с текстом, установленным на «Привет, мир!». Допустим, шрифт является системным шрифтом, установленным на 12 точек. Для этой метки требуется позиция макета, но ей не нужен размер. Система решит это — и динамически изменит его на основе пользовательских настроек.

Как разработчик, у вас есть несколько вещей, которые вы можете сделать. Очевидно, вы можете указать размер шрифта, который (а) предотвратит изменение OS или dynamicType, но это не изменит внутренний размер. Это еще одна вещь, которую вы можете сделать — установить высоту и ширину с помощью ограничений.

Если это единственное, что вы делаете — устанавливаете размер, но не шрифт — тогда метка будет обрезать вещи, если шрифт, выбранный пользователем в ОС, слишком большой.

Но, в конце концов, вам нужно установить две уникальные вещи с вашими ограничениями — размер и положение.