Почему мой UILabel не соответствует исходному фрейму? - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь создать всплывающую метку над изображением. Но в моем приложении это не работает. Я сделал тестовое приложение с тем же экраном: UIImageView и ниже UIView с UIButton в представлении.

Итак, где два вопроса.

  1. В чем может быть разница в коде для такого другого поведения?
  2. Почему в моем приложении UILabel не соответствует начальному кадру?

Код функции внутри моего viewController такой же :

private func showBanner(startY: CGFloat, targetView: UIView) {
    let height: CGFloat = 42
    let finishY = startY - height
    
    let bannerLabel = UILabel(frame: CGRect(x: 0, y: startY, width: self.view.frame.width, height: height))
    bannerLabel.translatesAutoresizingMaskIntoConstraints = false
    bannerLabel.font = UIFont.systemFont(ofSize: 13, weight: .regular)
    bannerLabel.textColor = .lightGray
    bannerLabel.backgroundColor = .black
    bannerLabel.textAlignment = .center
    bannerLabel.numberOfLines = 1
    bannerLabel.text = "You've added the item to the favorites"
    
    targetView.addSubview(bannerLabel)
    
    UIView.animate(withDuration: 0.5, animations: {
        bannerLabel.frame = CGRect(x: 0,
                                   y: finishY,
                                   width: self.view.frame.width,
                                   height: height
                                    )
    }) {
        _ in

        UIView.animate(withDuration: 0.5, delay: 1.0, options: .curveLinear, animations: {
            bannerLabel.frame = CGRect(x: 0,
                                       y: startY,
                                       width: self.view.frame.width,
                                       height: height
                                        )
        }, completion: {
            _ in
            bannerLabel.removeFromSuperview()
        })
    }
}

Функция вызывается так:

showBanner (startY: itemsImageView.frame.maxY, targetView: itemsImageView)

This is how it should be and is in the test app

Это мое приложение и каким НЕ ДОЛЖНО быть

1 Ответ

0 голосов
/ 20 июня 2020

Проблема была в строке: bannerLabel.translatesAutoresizingMaskIntoConstraints = false

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

...