自动布局保持拉伸UIImageView

时间:2013-12-30 17:08:30

标签: ios iphone objective-c xcode storyboard

我正在使用自动布局,这让我发疯了。我已尽我所能阻止UIImageView全面展开。我不知道为什么会那样做。我尝试使用约束,解决自动布局问题。目前,唯一的解决方案是转动汽车布局本身。

有谁能告诉我为什么xcode完全无视我的约束?当我明确地将它设置为那样时,我希望UIImage保持为320x320,但是noooooooo ....

我想发布图片,但该网站不会让我,我想为这个问题添加代码,以便它更具体,但实际上根本没有代码。我只是从故事板中拖出“UIImageView”,使其变小,按原样设置约束,而忽略了我的代码。

5 个答案:

答案 0 :(得分:48)

您需要确保将UIImageView设置为剪切到边界。如果没有,图像将溢出视图,并且看起来不会正确拉伸(即使实际上是这样)。

在界面构建器中,确保选中“剪辑子视图”框。

enter image description here

如果您没有使用界面构建器,则以下代码将执行相同的操作:

yourImageView.clipsToBounds = YES;

答案 1 :(得分:7)

使用自动布局时,大小检查器中的值几乎被忽略。

Anything you enter here will be ignored

您可能希望如果在大小检查器的框中键入数字,Xcode会自动创建约束以反映您键入的内容,但事实并非如此。您需要自己为UIImageView的高度和宽度创建“Pin”约束。

  • 选择情节提要上的图片视图
  • 点击情节提要屏幕右下角的“图钉”按钮
  • 在“宽度”和“高度”字段中键入所需的大小,并确保选中这些框
  • 点击“添加2个约束”按钮

    enter image description here

完成后,您应该能够在屏幕右侧的尺寸检查器中看到您的约束(紫色框)

enter image description here

答案 2 :(得分:5)

我的问题出在ContentHuggingPriorityContentCompressionResistancePriority

第一个控制保持视图的重要性"拥抱"图像(靠近它而不是扩展),后者控制视图对压缩的抵抗力。

我们使用PureLayout,因此修复它的代码是:

[NSLayoutConstraint autoSetPriority:ALLayoutPriorityRequired forConstraints:^{
    [myImageView autoSetContentCompressionResistancePriorityForAxis:ALAxisHorizontal];
    [myImageView autoSetContentHuggingPriorityForAxis:ALAxisHorizontal];
}];

(我的问题只在横轴上)

2016年5月15日:已更新为PureLayout v3语法。如果您使用版本< = 2,则只需添加UIView而不是NSLayoutConstraint。谢谢Rudolf J

答案 3 :(得分:3)

我遇到了同样的问题。我在原型单元格中添加了一个UIImageView,并希望将其与文本对齐,但在应用约束时它会继续拉伸图像。在我的情况下,我改变了模式'图像视图的属性为“适合度量”#39;它工作得很好。enter image description here

答案 4 :(得分:0)

您可以尝试以编程方式添加UIImageView。 使用viewDidLoad方法或您想要的方式调用此代码。

UIImageView *yourImageView = [[UIImageView alloc]initWithFrame:CGRectMake(50.0f, 50.0f, 320.0f, 320.0f)]; // x and y coordinates, width and height of UIImageView
[yourImageView setImage:[UIImage imageNamed:@"your_image.png"]];
[yourImageView setContentMode:UIViewContentModeCenter]; // you can try use another UIViewContentMode

[self.view addSubview:yourImageView];