如何从NSLayoutConstraints获取CGFloat值?

时间:2018-11-26 07:16:35

标签: ios swift autolayout constraints

我正在屏幕上使此个人资料视图变为圆形。但是我没有从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 :(得分:4)

这必须是因为访问startUpload(): void { const event: UploadInput = { type: 'uploadAll', url: 'server path' method: 'POST', headers: 'custom header', file: this.croppedImage, }; this.uploadInput.emit(event); } 的{​​{1}}时,frame并未布局约束。因此,如果您的imageViewautolayout类中,则应该imageView使用下面的方法,然后访问UIViewControlleroverride

width

如果height在自定义视图中,则可以override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() print(imageView.frame.height) } 使用以下方法,然后访问imageView

override

答案 1 :(得分:0)

请尝试此操作对您有帮助。

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

确保imageView的高度和宽度相同。谢谢

答案 2 :(得分:0)

您可以尝试在标识符检查器的情节提要中进行设置。像

enter image description here

答案 3 :(得分:0)

您还可以使用ViewDidAppear。因为此时自动布局引擎开始布局约束。

override func viewDidAppear() {
    super.viewDidAppear()
    print(imageView.frame.height)
}

答案 4 :(得分:-1)

尝试此扩展程序:

UICollectionViewCell