2

抱歉打扰了,但我正在尝试延迟加载几个 imageView,然后根据 UITableView 中的内容按比例调整它的大小。我也在尝试(可能是不明智的?)基本上是第一次使用自动布局。而且我不明白为什么约束在这种情况下不起作用。这是我在将正确的图像加载到 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;
}

就约束而言。我正在尝试将带有阴影的标签和 UIImageView 附加到主图像视图的底部。这是我应用于图像视图中底部阴影的约束。底部阴影约束是:

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

我没有得到我想要的。有任何想法吗?我觉得我正在与自动布局作斗争。

4

2 回答 2

9

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

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

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

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

_myWidthConstraint.constant = 300.f;

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

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

你怎么触发它?通过调用:

    [self setNeedsUpdateConstraints];

希望这可以帮助!有关更多信息,请查看 Ole Begemann 的优秀文章10 Things You Need To Know About Cocoa Autolayout

不要忘记 WWDC 视频。这些是必不可少的!

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

于 2013-06-25T14:35:41.340 回答
1

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

我通过取消选中“自动调整子视图”解决了这个问题。 在此处输入图像描述

于 2015-06-28T14:12:33.030 回答