Как получить значение CGFloat из NSLayoutConstraints? - PullRequest
0 голосов
/ 26 ноября 2018

Я работаю на экране, где хочу сделать этот профиль круглым.Но я не получаю высоту или ширину от imageView.frame.height, чтобы использовать ее в layer.cornerRadius.Пожалуйста, помогите мне.Спасибо.

enter image description here

Вот код для справки.

private func addImageView() {
        topView.addSubview(profilePicView)

        NSLayoutConstraint.activate([
            profilePicView.centerXAnchor.constraint(equalTo: topView.centerXAnchor),
            profilePicView.widthAnchor.constraint(equalTo: topView.heightAnchor, multiplier: 0.3)
            ])

        profilePicViewTopAnchor = profilePicView.topAnchor.constraint(equalTo: view.topAnchor, constant: 64)
        profilePicViewTopAnchor?.isActive = true

        profilePicViewHeightAnchor = profilePicView.heightAnchor.constraint(equalTo: topView.heightAnchor, multiplier: 0.3)
        profilePicViewHeightAnchor?.isActive = true
    }

И я пытаюсь получить значения как,

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print((profilePicViewHeightAnchor?.constant)!)
        profilePicView.layer.cornerRadius = (profilePicViewHeightAnchor?.constant)! / 2
        profilePicView.clipsToBounds = true

    }

решено

После каждой помощи я получил это решение, которое прекрасно работает для меня,

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        let radius = redView.frame.height * 0.3
        profilePicView.layer.cornerRadius = radius / 2
        profilePicView.clipsToBounds = true

        self.view.layoutIfNeeded()

    }

Спасибовсем вам, ребята.Очень ценю помощь.

Ответы [ 5 ]

0 голосов
/ 26 ноября 2018

Вы также можете использовать ViewDidAppear.because в это время двигатель Autolayout начал макет Constraint.

override func viewDidAppear() {
    super.viewDidAppear()
    print(imageView.frame.height)
}
0 голосов
/ 26 ноября 2018

Попробуйте это расширение:

 extension UIView {

        @IBInspectable
        /// Should the corner be as circle
        public var circleCorner: Bool {
            get {
                return min(bounds.size.height, bounds.size.width) / 2 == cornerRadius
            }
            set {
                cornerRadius = newValue ? min(bounds.size.height, bounds.size.width) / 2 : cornerRadius
            }
        }
    }
0 голосов
/ 26 ноября 2018

Вы можете попытаться установить в раскадровке идентификатор инспектора.как

enter image description here

0 голосов
/ 26 ноября 2018

Это должно быть потому, что когда вы обращаетесь к frame для imageView, ограничения макета не выкладываются autolayout.Итак, если ваш imageView находится внутри UIViewController класса, то вам следует override нижеприведенный метод и затем получить доступ к width и height.

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    print(imageView.frame.height)
}

Если imageView находится внутрипользовательский вид, то вы можете override ниже метод и затем получить доступ к frame,

override func layoutSubviews() {
    super.layoutSubviews()

    print(imageView.frame.height)
}
0 голосов
/ 26 ноября 2018

Пожалуйста, попробуйте это, это поможет вам.

imageView.layer.cornerRadius =  imageView.frame.size.height / 2
imageView.clipsToBounds = true

Убедитесь, что ваш рост и ширина imageView одинаковы.Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...