ios - Autolayout UIImageView 具有不遵循约束的编程调整大小

标签 ios uiimageview autolayout

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

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

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

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

最佳答案

如您所愿!以下是一些使用自动布局的指南,应该会有很大帮助。

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

如果这不起作用,那么您可能必须以编程方式更新约束。现在,我提到的黄金法则是更新约束。抵制更新底层 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 .虽然我已经买了它,但我还没有机会阅读它。不过看起来确实不错。

关于ios - Autolayout UIImageView 具有不遵循约束的编程调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17299223/

相关文章:

ios - iBeacon 通知数据库

ios - 检查 UIImageView 是否有动画

ios - IBOutlet NSLayoutConstraint 没有给出值

ios - 允许 UILabel 使用自动布局动态增长

ios - 使用 NSNotificationCenter 在 View Controller 之间传递数据

android - 如何在flutter中制作依赖的多级DropDown?

iOS Parse.com SDK : Handling Errors

ios - 而不是图像,以前的视频(AVPlayer)显示在 ios 的 UIImageView 中

objective-c - 创建 UIImage 抠图

swift - 使用 swift 的代码中的约束 - 无法激活