Rym*_*nel 2 uiimageview ios autolayout
很抱歉打扰但我正在尝试延迟加载几个imageViews,然后按比例调整它与UITableView中的内容.我也在尝试(Unwisely或许?)第一次使用Autolayout.我不明白为什么约束在这种情况下不起作用.这是在我将正确的图像加载到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;
}
Run Code Online (Sandbox Code Playgroud)
就约束而言.我正在尝试将带有阴影的Label和UIImageView附加到主imageview的底部.以下是我在imageview中应用于底部阴影的约束.底部阴影约束是:
Height Equals: 83
Align Bottom to: Background Image View
LeadingSpace to: Table View Cell
Run Code Online (Sandbox Code Playgroud)
我没有得到我想要的东西.有任何想法吗?我觉得我在和autolayout战斗.
按照要求!以下是使用Autolayout的一些指导原则应该会有很多帮助.
首先,理想的方法是让您在Interface Builder中进行设置,以便不需要进一步编程.因此,如果 - 例如 - 视图的边界发生变化,那么您的视图将根据需要自动调整.
如果这不能完成业务,那么您可能必须以编程方式更新约束.现在,我提到的黄金规则是你更新约束.抵制更新底层UIView框架的诱惑!
所以,你会做的事情如下:
_myWidthConstraint.constant = 300.f;
Run Code Online (Sandbox Code Playgroud)
接下来要注意的是,您应该在特定的位置执行此操作,这是在您的UIView子类方法中updateConstraints:
- (void)updateConstraints
{
[super updateConstraints];
_myWidthConstraint.constant = 300.f;
}
Run Code Online (Sandbox Code Playgroud)
你是如何触发的?通过调用:
[self setNeedsUpdateConstraints];
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!欲了解更多信息,请查看Ole Begemann 关于Cocoa Autolayout的10篇优秀文章.
不要忘记WWDC视频.这些都很重要!
此外,现在有一本书iOS Auto Layout Demystified.虽然我买了它,但我还没机会读它.虽然看起来确实不错.