使用ScrollView的故事板约束不受尊重

时间:2016-01-22 12:14:32

标签: ios objective-c iphone storyboard

我对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)

3 个答案:

答案 0 :(得分:3)

Scrollview constraints

请找到添加到scrollview的约束,即顶部,左侧,右侧,底部约束。 以同样的方式为scrollview中的各个元素设置约束,即textfieldbutton。对于这些元素,请设置左,右,顶部和高度约束。我已在我的代码中添加了实现您的功能,请参阅下面的截图。 Portrait mode Landscape mode

答案 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解决了我的问题,我在纵向或横向中获得了正确的设计和行为:圆角应该是圆形并尊重约束。

enter image description here

stackoverflow中的另外两个来源我以前没有找到过,对于有ScrollView问题的人可能有用: