我对iOS很陌生,特别是使用Storyboard复杂的视图。我开始尝试使用AutoLayout开发以下屏幕,因此我不需要担心不同的iDevices屏幕尺寸。
我使用ScrollView将内容移动到可见空间,同时需要使用键盘输入一些信息。事情是我重新创建所有约束很多次尝试使字段尊重ScrollView的宽度。实际上,在运行时,所有字段的显示都大于ScrollView宽度(它就像是向右溢出屏幕宽度)。奇怪的是按钮尊重它的宽度。当我在iPhone 6s Plus上将方向更改为横向时,这些字段的宽度小于屏幕宽度,就像我已经定义了特定尺寸一样,按钮会根据约束继续遵循尺寸。有什么想法吗?
层次:
View Controller
View A
Scroll View
View B
Logo / App name / UITextFields / Switch / Button / Link
基本上,Scroll受视图A约束。视图B的宽度与视图A和滚动边距相等。
当前Xcode版本:7.2(7C68)
答案 0 :(得分:3)
请找到添加到scrollview的约束,即顶部,左侧,右侧,底部约束。
以同样的方式为scrollview中的各个元素设置约束,即textfield
和button
。对于这些元素,请设置左,右,顶部和高度约束。我已在我的代码中添加了实现您的功能,请参阅下面的截图。
答案 1 :(得分:1)
滚动视图约束 - 顶部,底部,前导,尾随, 视图B约束 - 顶部,底部,前导,尾随和必须高度 - 宽度约束集, 其他元素 - 前导,中心垂直和必须高宽比
请尝试,这将有助于解决您的问题。
答案 2 :(得分:1)
首先,我要感谢Bharath和Dhaval的回答,他们真的很有帮助。
虽然这些答案帮助我在这个视图中有了更好的行为,但事实证明我的问题与ScrollView没有关系,但有一个掩码我应用于这些字段以及那些字段应用了面具。
我正在使用这些蒙版来获得一个自定义的圆角,所以我的角落与后期图像完全相同:
// Change webservice's text field style
CAShapeLayer *shape = [[CAShapeLayer alloc] initWithLayer:self.url.layer.mask];
UIBezierPath *shadow = [UIBezierPath bezierPathWithRoundedRect:self.url.bounds byRoundingCorners:(UIRectCornerAllCorners) cornerRadii:CGSizeMake(5, 5)];
shape.path = shadow.CGPath;
self.url.layer.mask = shape;
但是这个掩码应用于viewDidLoad。更改为viewDidLayoutSubviews解决了我的问题,我在纵向或横向中获得了正确的设计和行为:圆角应该是圆形并尊重约束。
stackoverflow中的另外两个来源我以前没有找到过,对于有ScrollView问题的人可能有用: