Autolayout UIImageView具有编程重新大小而不遵循约束

很抱歉打扰但我正在尝试延迟加载几个imageViews然后按比例resize到UITableView中的内容。 我也在尝试(不明智吗?)第一次使用Autolayout。 我不明白为什么约束在这种情况下不起作用。 这是我在将正确的图像加载到UIImageView后用来resize的代码。

// Scale the image view and return it. - (UIImageView *) scaleImageViewForScreenWidth:(UIImageView *)imageView { UIImage *imgFromView = [imageView image]; CGRect newFrame = CGRectMake(0, 0, imgFromView.size.width, imgFromView.size.height); float imgFactor = newFrame.size.height / newFrame.size.width; newFrame.size.width = [[UIScreen mainScreen] bounds].size.width; newFrame.size.height = newFrame.size.width * imgFactor; [imageView setFrame:newFrame]; return imageView; } 

就约束而言。 我正在尝试将带有阴影的Label和UIImageView附加到主imageview的底部。 以下是我在imageview中应用于底部阴影的约束。 底部阴影约束是:

 Height Equals: 83 Align Bottom to: Background Image View LeadingSpace to: Table View Cell 

我没有得到我想要的东西。 有任何想法吗? 我觉得我在和autolayout战斗。

按照要求! 这里有一些使用Autolayout的指南应该有很多帮助。

首先,理想的方法是让您在Interface Builder中进行设置,以便不需要进一步编程。 因此,如果 – 例如 – 视图的边界发生变化,那么您的视图将根据需要自动调整。

如果这不能完成业务,那么您可能必须以编程方式更新约束。 现在,我提到的黄金法则是你更新约束。 抵制更新底层UIView框架的诱惑!

所以,你会做的事情如下:

 _myWidthConstraint.constant = 300.f; 

接下来要注意的是,您应该在特定的位置执行此操作,这是在UIView子类方法updateConstraints

 - (void)updateConstraints { [super updateConstraints]; _myWidthConstraint.constant = 300.f; } 

你是如何触发的? 通过调用:

  [self setNeedsUpdateConstraints]; 

希望这可以帮助! 欲了解更多信息,请查看Ole Begemann 关于Cocoa Autolayout的10篇优秀文章。

不要忘记WWDCvideo。 这些都很重要!

此外,现在有一本书iOS Auto Layout Demystified 。 虽然我买了它,但我还没机会读它。 虽然看起来确实不错。

我也面临同样的问题。 imageview中的图像对于imageview而言太大,而contentMode设置为AspectFill

我通过取消选中 “Autoresize Subviews”解决了这个问题。 在此处输入图像描述