我已经添加了这样的约束,但无法获得正确的 View 框架。
[self addSubview:self.scrollView];
[self.scrollView addSubview:self.contectView];
NSDictionary *views = @{@"scrollView" : self.scrollView , @"contectView" : self.contectView };
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics:0 views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView(==64)]" options:0 metrics:0 views:views]];
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contectView]|" options:0 metrics:0 views:views]];
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contectView]|" options:0 metrics:0 views:views]];
[self layoutIfNeeded];
NSLog(@"%@",self.scrollView);
NSLog(@"%@",self.contectView);
控制台 O/p
<UIScrollView: 0x78fd47a0; frame = (0 0; 0 64); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x78faced0>; layer = <CALayer: 0x78facea0>; contentOffset: {0, 0}; contentSize: {0, 0}>
<UIView: 0x78fae7d0; frame = (0 0; 0 0); layer = <CALayer: 0x78fad970>>
我正在考虑 contectView 框架高度也是 64。但它返回 0
最佳答案
在 UIScrollView 中,自动布局以不同的方式工作。如果你仔细想想你在约束方面写的东西就像要求你的内容 View 适合内容 View ,但我们想要相反的方式。
现在你有两个选择:
- 为 ScrollView 提供一个 contentSize
- 确保我们的内容 View 的内在内容大小大于 ScrollView 框架。您可以通过固定内容 View 的大小,或通过向内容 View 提供一组保证固有内容大小的 subview 来做到这一点。
更多信息 here
关于ios - constraintsWithVisualFormat 无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30542962/