如何改变UIView的宽高比

时间:2015-04-26 12:18:47

标签: ios uiview autolayout aspect-ratio

我有一个自定义UIView,它以编程方式使用autolayout来设置框架的大小。为此,我将视图的width属性设置为等于superview的约束,然后将宽高比的约束设置为某个硬编码值

//width constraint
NSLayoutConstraint *widhtConstraint=[NSLayoutConstraint constraintWithItem:entryView
                                                                 attribute:NSLayoutAttributeWidth
                                                                 relatedBy:NSLayoutRelationEqual
                                                                    toItem:scrollView
                                                                 attribute:NSLayoutAttributeWidth
                                                                multiplier:1.0f
                                                                  constant:8.0f];

[scrollView addConstraint:widhtConstraint];

//aspect ratio constraint
NSLayoutConstraint *aspectRatioConstraint=[NSLayoutConstraint constraintWithItem:entryView
                                                                       attribute:NSLayoutAttributeWidth
                                                                       relatedBy:NSLayoutRelationEqual
                                                                          toItem:entryView
                                                                       attribute:NSLayoutAttributeHeight
                                                                      multiplier:80.0/27.0//aspect ratio same as formula view
                                                                        constant:0.0f];

[scrollView addConstraint:aspectRatioConstraint];

请参考图片:

Constraint setup

我希望通过增加其高度来更改此框架的纵横比(查看更多),然后通过触摸相同的按钮将其重新调整为原始尺寸。此外,我如何计算总高度视图由其所有子视图控制,以便每个子视图都可见而不会剪切。(基本上是标准折叠功能)

2 个答案:

答案 0 :(得分:0)

您可以将宽高比作为代码中的变量,并使用代码在updateConstraints等方法中设置约束。

float aspectRatio; NSLayoutConstraint *aspectRatioConstraint=[NSLayoutConstraint constraintWithItem:entryView
                                                                   attribute:NSLayoutAttributeWidth
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:entryView
                                                                   attribute:NSLayoutAttributeHeight
                                                                  multiplier:self.aspectRatio//aspect ratio same as formula view
                                                                    constant:0.0f];

然后当按下按钮时,在action方法中你可以修改self.aspectRatio,然后调用setNeedsUpdateConstraints,然后调用setNeedsLayout。

答案 1 :(得分:0)

我还没有确切地知道问题是什么,但是为了扩展/折叠超级视图而改变约束以响应按钮,这很容易:

enter image description here

如果这是你想要的东西,你可以在这里找到一个可下载的示例项目:https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/bk2ch04p183animationAndAutolayout4