抱歉打扰了,但我正在尝试延迟加载多个 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/