【发布时间】:2013-10-06 23:12:58
【问题描述】:
我有一个按钮,其图像在运行时动态设置。因此,为了保持适当的比例,我在设置图像的位置有以下代码:
[super removeConstraint:self.ratioConstraint];
float ratio=photo.size.height/photo.size.width;
self.ratioConstraint=[NSLayoutConstraint constraintWithItem:self.button
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:self.button
attribute:NSLayoutAttributeWidth
multiplier:ratio
constant:0];
[self.ratioConstraint setPriority:UILayoutPriorityDefaultHigh];
[super addConstraint:self.ratioConstraint];
我什至申请了[self layoutSubviews] 让我检查框架。当我查询框架时,它是正确的。 1的比例得到尊重,高度设置为等于宽度。
但在 ViewWillAppear 中,同样的查询会产生同样不可能的结果:框架的高度正在拉伸,以使图像增长到它的全高。尽管有上述约束,它应该根据现有(和尊重的)宽度限制来限制高度。
更令人恼火的是,直到我在运行时将图像设置为新的东西(即通过拍摄相机),约束似乎是有效的——占位符图像被水平压扁,并垂直压缩以适应。只有在我拍一张照片时,那个高度才会爆炸,无缘无故地忽略它的约束。
如果重要,上面的代码在 UIControl 的自定义子类中执行,然后嵌入到 UIView ('ContentView') 中,该 UIView ('ContentView') 本身嵌入在滚动视图中。宽度限制或多或少是:
“ContentView”的宽度等于 ViewController 的视图。 然后,UIControl 视图将其宽度设置为一个值,使其大约为屏幕宽度的一半或四分之一,具体取决于确切的控件。 (我有五个;一个占屏幕宽度的一半,其他都占四分之一并排成一排)。 UIControl 然后通过约束设置 UIButton 的宽度等于它自己的宽度:H:|-(0)-[Button]-(0)-| .
更烦人的是,我从 UIViewController 的视图向下遍历并检查了 每个 约束——一些递归逻辑将给定视图中的每个约束都拉出,它是应用于给定视图的子视图主题。然后我对视图层次结构中的每个对象运行它,并得到... zip。没有干扰的约束。没有什么会影响相关按钮的高度除了上面的代码,它应用了比率约束。
【问题讨论】:
标签: ios objective-c autolayout