2016-08-27 4 views
0

이 이미지를 이미지보기에 놓고 가로 세로 맞춤으로 설정하기 만하면됩니다. 자동 레이아웃으로 이미지보기 프레임이 올바르게 설정되지 않았습니다.

enter image description here

런타임시
override func viewDidLoad() { 
     super.viewDidLoad() 
     let image = UIImage(named: "1-landscape") 
     let imageView = UIImageView(image: image) 
     imageView.translatesAutoresizingMaskIntoConstraints = false 
     imageView.backgroundColor = UIColor.blackColor() 
     imageView.contentMode = .ScaleAspectFit 
     view.addSubview(imageView) 
     var collector = [NSLayoutConstraint]() 
     collector.appendContentsOf(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[imageView]-0-|", options: [], metrics: nil, views: ["imageView": imageView])) 
     collector.append(NSLayoutConstraint(item: imageView, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0)) 
     view.addConstraints(collector) 
    } 

는 뷰의 높이를 화상 높이의 50 %보다 크다. 왜 ??? 우리는 우리의 견해를 누워의 구식 방법을 사용하는 경우

enter image description here

는 아무 문제가 없다. 자동 레이아웃 또는 다른 것으로 단계를 잊어 버렸습니까?

override func viewDidLoad() { 
     super.viewDidLoad() 
     let image = UIImage(named: "1-landscape.png")! 
     let scaleFactor = image.size.height/image.size.width 
     let width = view.frame.size.width 
     let height = width * scaleFactor 
     let size = CGSize(width: width, height: height) 
     let imageView = UIImageView(image: image) 
//  imageView.translatesAutoresizingMaskIntoConstraints = false 
     imageView.backgroundColor = UIColor.blackColor() 
     imageView.contentMode = .ScaleAspectFit 
     imageView.frame.size = size 
     imageView.center = view.center 
     view.addSubview(imageView) 
//  var collector = [NSLayoutConstraint]() 
//  collector.appendContentsOf(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[imageView]-0-|", options: [], metrics: nil, views: ["imageView": imageView])) 
//  collector.append(NSLayoutConstraint(item: imageView, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0)) 
//  view.addConstraints(collector) 
    } 
+0

후이

view.layoutIfNeeded() let widthRatio = imageView.bounds.size.width/image!.size.width let heightRatio = imageView.bounds.size.height/image!.size.height let scale = widthRatio < heightRatio ? widthRatio : heightRatio let imageHeight = scale * imageView.image!.size.height view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .Height , relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: imageHeight)) 

을 추가하지만, 같은 고정 된 높이를 설정함으로써 규모 측면 –

답변

0

종횡비를 고정하는 구속을 사용하여 높이를 강요하는 트릭.

override func viewDidLoad() { 
     super.viewDidLoad() 
     let image = UIImage(named: "1-landscape.png")! 
     let imageView = UIImageView(image: image) 
     imageView.translatesAutoresizingMaskIntoConstraints = false 
     imageView.backgroundColor = UIColor.blackColor() 
     imageView.contentMode = .ScaleAspectFit 
     view.addSubview(imageView) 
     var collector = [NSLayoutConstraint]() 
     collector.appendContentsOf(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[imageView]-0-|", options: [], metrics: nil, views: ["imageView": imageView])) 
     collector.append(NSLayoutConstraint(item: imageView, attribute: .Height, relatedBy: .Equal, toItem: imageView, attribute: .Width, multiplier: image.size.height/image.size.width, constant: 0)) 
     collector.append(NSLayoutConstraint(item: imageView, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0)) 
     view.addConstraints(collector) 
    } 
0

이미지의 크기가 조정되면 이미지 크기 만 변경됩니다. imageView의 크기는 변경되지 않습니다. Ratio를 찾아서 변경해야합니다.

나는이 작동하는지 모르겠어요이 줄 view.addConstraints(collector)

+0

을 설정 한 후 이미지 뷰에서 이미지를로드하려고 이미지보기는 회전과 같은 상황에서는 확대/축소되지 않습니다. 이 문제를 해결하려면 내 대답을 참조하십시오. –

관련 문제