Перемещение пользовательского интерфейса внутри другого пользовательского интерфейса с помощью addSubview

#swift

#swift

Вопрос:

У меня есть UIImageView , и я хотел бы выровнять его по правому краю. Но я пытаюсь начать с простого перемещения:

 let imageView = UIImageView(image: UIImage(named: "icon_delete"))

var rect = imageView.frame
rect.origin.x  = 100
imageView.frame = rect

photosViewController.overlayView.bottomStackContainer.addSubview(imageView)
  

Но, похоже, это не работает, и изображение было установлено на левую сторону:

введите описание изображения здесь

Что не так?

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

1. Является bottomStackContainer UIStackView ?

2. @RicoCrescenzio нет, это AXStackableViewContainer , то есть UIView это AXPhotoViewer библиотека

Ответ №1:

Попробуйте использовать привязки автозапуска

 imageView.leadingAnchor.constraint(equalTo: bottomStackContainer.leadingAnchor, constant: 100).isActive = true
  

Является ли bottomStackContainer StackView? Затем вы должны добавить упорядоченные подвиды с помощью методаaddArrangedSubview().

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

1. нет, это AXStackableViewContainer , то есть UIView это AXPhotoViewer библиотека

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

3. Да, потому что эта библиотека также использует некоторые ограничения. Вы можете добавить два изображения, свой значок и прозрачное изображение шириной 100 пикселей. Или отредактируйте свой значок, добавьте прозрачную часть на 100 пикселей слева.

Ответ №2:

Попробуйте перерисовать представление с помощью setNeedsDisplay() метода.

Ссылка: https://www.hackingwithswift.com/example-code/uikit/how-to-force-a-uiview-to-redraw-setneedsdisplay

Ответ №3:

Во-первых, предполагая, что:

 photosViewController.overlayView.bottomStackContainer
  

это представление (которое я называю containingView в моем фрагменте), попробуйте что-то вроде:

 let imageView = UIImageView(image: UIImage(named: "icon_delete"))
containingView.addSubview(imageView)

imageView.translatesAutoresizingMaskIntoConstraints = false
containingView.translatesAutoresizingMaskIntoConstraints = false
imageView.trailingAnchor.constraint(equalTo: containingView.trailingAnchor).isActive = true
  

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

 imageView.trailingAnchor.constraint(equalTo: containingView.trailingAnchor, constant: -10).isActive = true
  

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