Ios Autolayout UIImageView的程序重新调整大小不受以下约束

Ios Autolayout UIImageView的程序重新调整大小不受以下约束,ios,uiimageview,autolayout,Ios,Uiimageview,Autolayout,很抱歉打扰您,但我正在尝试延迟加载几个ImageView,然后根据UITableView中的内容按比例调整其大小。我也在尝试(也许是不明智的?)第一次基本上使用自动布局。我不明白为什么约束在这种情况下不起作用。下面是我在将正确的图像加载到UIImageView中后用来调整UIImageView大小的代码 // Scale the image view and return it. - (UIImageView *) scaleImageViewForScreenWidth:(UIImageVie

很抱歉打扰您,但我正在尝试延迟加载几个ImageView,然后根据UITableView中的内容按比例调整其大小。我也在尝试(也许是不明智的?)第一次基本上使用自动布局。我不明白为什么约束在这种情况下不起作用。下面是我在将正确的图像加载到UIImageView中后用来调整UIImageView大小的代码

// 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;
}
就约束而言。我正在尝试在主imageview的底部附加一个标签和一个带有阴影的UIImageView。下面是我在imageview中应用于底部阴影的约束。底部阴影约束为:

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

但是我没有得到我想要的。有什么想法吗?我觉得我在和自动布局作斗争

按要求!下面是一些使用Autolayout的指南,应该会有很大帮助

首先,理想的方法是在Interface Builder中进行设置,这样就不需要进一步编程。因此,如果(例如)视图的边界发生变化,则视图将根据需要自动进行调整

如果这不起作用,那么您可能必须以编程方式更新约束。现在,我提到的黄金法则是更新约束。抵制更新基础
UIView
框架的诱惑

因此,您将执行以下操作:

_myWidthConstraint.constant = 300.f;
接下来要注意的是,您应该在特定的位置执行此操作,即在
UIView
子类方法
updateConstraints

- (void)updateConstraints
{
    [super updateConstraints];
    _myWidthConstraint.constant = 300.f;
}
你是怎么触发的?通过调用:

    [self setNeedsUpdateConstraints];
希望这有帮助!欲了解更多信息,请查阅奥勒·贝格曼的优秀文章

别忘了WWDC的视频。这些是必不可少的


还有,现在有一本书。虽然我买了它,但我还没有机会读它。不过看起来确实不错。

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

我通过取消选中“自动调整子视图大小”来解决这个问题。

自动布局的第一条黄金法则。不要将约束与帧计算混合使用。第二条黄金法则,更新约束常量,而不是视图的frame@MaxMacLeod请发布一个答案,我会选择你作为答案!太简单了,我忽略了它。我只是停止调用设置帧的代码。相反,我设置了heig把手机调成任何样子,一切都很完美。哇。那太简单了。谢谢!太棒了!很好,你成功了