我有一个自定义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];
请参考图片:
我希望通过增加其高度来更改此框架的纵横比(查看更多),然后通过触摸相同的按钮将其重新调整为原始尺寸。此外,我如何计算总高度视图由其所有子视图控制,以便每个子视图都可见而不会剪切。(基本上是标准折叠功能)
答案 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)
我还没有确切地知道问题是什么,但是为了扩展/折叠超级视图而改变约束以响应按钮,这很容易:
如果这是你想要的东西,你可以在这里找到一个可下载的示例项目:https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/bk2ch04p183animationAndAutolayout4