很抱歉打扰但是我正在尝试延迟加载几个imageViews然后按比例调整它以适应UITableView中的内容。我也在尝试(Unwisely或许?)第一次使用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
我没有得到我想要的东西。有任何想法吗?我觉得我在和autolayout战斗。
答案 0 :(得分: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 。虽然我买了它,但我还没机会读它。虽然看起来确实不错。
答案 1 :(得分:1)
我也面临同样的问题。 imageview中的图片对于imageview来说太大了,contentMode
设置为AspectFill
。
我通过取消选中'Autoresize Subviews'解决了这个问题。