以小于其内在大小的大小显示UIImageView

时间:2015-07-31 01:24:04

标签: ios swift

采用了Autolayout和Storyboard后,我不再按照精确尺寸设计屏幕了,所以当我使用图像时,我倾向于使用相当大尺寸的图像,这样它在iPad上看起来很清晰,但可以按比例缩小较小的iPhone。我将此图片拖到资产目录中。

当我将图像放入我的故事板中的视图控制器时,图像希望成为其固有的大小。我只能通过设置一个特定的宽度,与另一个对象成比例的宽度,或者通过将它限制在另外两个项目之间来显示它。

我现在正处于项目的另一个角落,我需要在代码中添加图像。虽然我为图像的框架设置了特定的高度和宽度,但图像仍然以其固有尺寸显示在屏幕上,而不是我使用它设置的位置:

myImage.frame = CGRect(x: self.view.center.x - 50, y: 100, width: 100, height: 100)

关于我缺少的任何想法?谢谢!

2 个答案:

答案 0 :(得分:1)

我希望您在imageViewCenterX中添加margin top 100。并保持图像方面的正方形大小100,100。下面的代码将帮助您。

    let imageName = "your image name in resource"
    let imageView = UIImageView(frame: CGRectMake(0, 0, 200, 200))
    imageView.image = UIImage(named: imageName)
    imageView.contentMode = .ScaleAspectFit
    imageView.setTranslatesAutoresizingMaskIntoConstraints(false)

    self.view.addSubview(imageView)

    // add your constraint
    let constTop = NSLayoutConstraint(item: imageView, attribute:.Top, relatedBy: .Equal, toItem: self.view, attribute: .Top, multiplier: 1, constant: 100)
    //        var constLeading = NSLayoutConstraint(item: imageView, attribute: .Leading, relatedBy: .Equal, toItem: self.view, attribute: .Leading, multiplier: 1, constant: self.view.center.x - 50)

    var constCenterX = NSLayoutConstraint(item: imageView, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0);

    var constWidth = NSLayoutConstraint(item: imageView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: 100);
    var constHight = NSLayoutConstraint(item: imageView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1, constant: 100);

    imageView.addConstraints([constHight, constWidth])
    self.view.addConstraints([constTop, constCenterX])

希望这有帮助!

答案 1 :(得分:-1)

您需要设置UIImageView的contentMode,它实际上是UIView的属性:

https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIView_Class/index.html#//apple_ref/swift/enum/c:@E@UIViewContentMode

如果您在代码中采用布局,我希望您在正确的位置执行此操作...通过覆盖layoutSubviews(),如果 需要由外部触发事件,该事件在父视图上触发setNeedsLayout()

如果必须在代码中完成,则需要进行大量握手和配置。