
문제점:
UIImageView에서 scaleToFit 설정을 준 후, constraint를 통해 width가 화면 뷰에 맞도록 고정시켰다.
하지만 UIImagView의 크기가 줄어들지 않아 남는 여백이 생겨 UIImageView를 Image 크기에 맞게 AutoLayout을 설정하려 한다.
해결법:
-
Image의 비율을 저장한다.
-
AutoLayout의 height 설정에서 저장한 비율을 이용해 UIImageView의 width값으로 height값을 구해 AutoLayout을 설정한다.
private let postImageView: UIImageView = { let iv = UIImageView() iv.contentMode = .scaleAspectFit iv.layer.borderWidth = 1 iv.image = #imageLiteral(resourceName: "venom-7") return iv }()
addSubview(postImageView) postImageView.snp.makeConstraints { make in make.top.equalTo(usernameButton.snp.bottom).offset(8) make.leading.equalTo(self).offset(8) make.trailing.equalTo(self).offset(-8) }
위 스크릿샷의 설정이다.
leading과 trailing설정에서 뷰로부터 8씩 떨어지게해서 width값을 고정시켰다.
이제 UIImageView의 저장된 image의 비율을 ratio 변수에 저장하고,
let ratio: CGFloat = image.size.width / image.size.height
현재 UIImageView의 width에 대해 저장된 비율로 height를 고정시키면 된다.
postImageView.snp.makeConstraints { make in make.height.equalTo(self.postImageView.snp.width).multipliedBy(1/ratio) }

해결!!