Применение ограничений программно к UIImageView Subview - PullRequest
0 голосов
/ 22 мая 2019
  1. У меня есть uiview, который изменяет размеры с autolayout ограничениями.
  2. У меня есть uiimageview, который я вставляю как subview и затем сохраняю в базе данных расстояния от передних / задних / верхних / нижних краев до uiview суперпредставления. Еще одно примечание: оригинал uiimageview можно преобразовать и перевести, поэтому CGPoint, CGAffineTransform и CGRect также будут сохранены.
  3. Я извлекаю из базы данных эти «постоянные» значения для каждого ребра, а затем программно активирую ограничения для экземпляра uiimageview, чтобы скопировать вставленный оригинал uiimageview.

Моя причина добавить ограничения для uiimageview пропорционально адаптироваться к изменению размера uiview.

Моя проблема в том, что в моем коде есть что-то дурацкое, и я не могу решить, почему я не могу воспроизвести оригинал uiimageview на основе данных, которые я хранил, выбирал и затем применял повторно.

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

//Storing constraint constants of original uiimageview in original container uiview
let leadingConstraint = originalImageView.frame.minX
let trailingConstraint = oldContainer.frame.maxX - originalImageView.frame.maxX
let topConstraint = originalImageView.frame.minY
let bottomConstraint = oldContainer.frame.maxY - originalImageView.frame.maxY

//Fetching and applying constants to new uiimageview in new container uiview (Separate operation from the above! Above takes place first!)

newImageView.bounds = CGRect(x: 0, y: 0, width: 80, height: 80)
newImageView.center = CGPoint(x: saved.x, y: saved.y)
newImageView.transform = CGAffineTransform(a: saved.a, b: saved.b, c: saved.c, d: saved.d, tx: saved.tx, ty: gifForm.ty)

newContainer.insertSubview(newImageView, at: 0)

newImageView.translatesAutoresizingMaskIntoConstraints = false
let leadingConstraint = newImageView.leadingAnchor.constraint(equalTo: newContainer.leadingAnchor, constant: saved.leadingConstant)
let trailingConstraint = newImageView.trailingAnchor.constraint(equalTo: newContainer.trailingAnchor, constant: -saved.trailingConstant)
let topConstraint = newImageView.topAnchor.constraint(equalTo: newContainer.topAnchor, constant: saved.topConstant)
let bottomConstraint = newImageView.bottomAnchor.constraint(equalTo: newContainer.bottomAnchor, constant: -saved.bottomConstant)
NSLayoutConstraint.activate([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint])

1 Ответ

0 голосов
/ 22 мая 2019

Попробуйте использовать исключительно ограничения (установка translatesAutoresizingMaskIntoConstraints на false) или нет (оставляя это true).

Вы не можете использовать оба, то есть вы не можете использовать такие вещи, как .center, если вы планируете использовать ограничения, но вместо этого должны использовать аналоги, такие как centerXAnchor и centerYAnchor.

Также не уверен, что это просто халатность, но четыре строки в конце используют те же имена свойств, что и выше.

...