我有一个UIImageView,其高度受用户从其库中选取或选择的照片的宽高比影响。在用户选择照片后,我无法正确地(或根本不)调整UIImageView的大小。
代码:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
//let mediaType2 : UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage
let mediaType : CFString = info[UIImagePickerControllerMediaType] as! CFString
if mediaType == kUTTypeMovie {
let path = (info[UIImagePickerControllerMediaURL] as! NSURL).path
if UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(path!) {
UISaveVideoAtPathToSavedPhotosAlbum(path!, self, "video:didFinishSavingWithError:contextInfo:", nil)
}
}
else{
let img : UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage
let screenSize: CGRect = UIScreen.mainScreen().bounds
let multiplyNum = screenSize.width / img.size.width
imageView.frame = CGRectMake(0, 0, screenSize.width, multiplyNum*img.size.height)
imageView.image = img
}
self.dismissViewControllerAnimated(true, completion: {})
}
目前在故事板中设置了约束,但我想以编程方式覆盖imageView的约束。
答案 0 :(得分:1)
您应该更新UIImageView的约束而不是设置框架。为图像视图设置高度约束,然后为该约束创建一个IBOutlet(控制从约束拖动到它的视图控制器中),称之为" imageViewHeightConstraint。"然后在你的代码中说出如下内容:
imageViewHeightConstraint.constant = multiplyNum*img.size.height
答案 1 :(得分:0)
@ beyowulf的答案将起作用并且很容易实现
但是如果您不想设置约束出口,可以在代码中指定ratio属性,而且女巫也很简单:
//remove the last image ration constraint
if let ratioConstrain = self.ratioConstrain {
self.imageView.removeConstraint(ratioConstraint)
}
self.ratioConstraint = NSLayoutConstraint(
item: self.imageView, attribute: NSLayoutAttribute.Width,
relatedBy: NSLayoutRelation.Equal,
toItem: self.imageView,
attribute: NSLayoutAttribute.Height,
multiplier: image!.size.width / image!.size.height,
constant: 0)
self.imageView.addConstraint(self.ratioConstraint!)
请勿使用不起作用的框架 在这种情况下,您需要删除imageView的高度约束,并将宽度设置为超级视图,您将得到您想要的:屏幕宽度相等,高度随图像本身的比例而变化。 / p>
有一个问题,如果您从滚动得到的图像太小,您可能希望宽度小于屏幕,在这种情况下,您应该将imageView宽度约束设置为lessThanOrEqual(< =),并且添加一些位置约束(如中心垂直,中心水平),看起来会更好。