IB中的自动布局:如何设置视图控制器主视图的子视图以调整其超视图大小?

时间:2013-11-05 23:01:26

标签: ios7 interface-builder autolayout

看起来像是一个不用脑子但我无法让这个简单的设置正确! 请注意,我不想通过代码添加约束,而是通过IB执行所有操作:

  1. Sttoryboard中的一个视图控制器,其主视图和集合视图作为主视图的子视图
  2. 我想设置它,以便在加载视图控制器时,其主视图会调整为设备屏幕大小(3.5 vs 4,因此320 x 480 vs 320 x 568)。并且集合视图也应该调整大小以占用其父视图定义的整个区域。
  3. 我做了什么:

    1. 使用带有主视图的新视图控制器创建了一个新的Storyboard
    2. 将集合视图创建为主视图的子视图。
    3. 将集合视图的大小设置为与IB中的父级相同的大小(在编辑时为4英寸格式)。
    4. 相对于superview,我将集合视图的前导,顶部,尾部和底部约束设置为0。我假设这意味着“调整大小到你需要的任何东西,以便间距约束保持”,因为它们都是0,这意味着调整大小以适应整个超视区域。
    5. 在视图控制器代码中,我确保它与集合视图一样,直到datasource / delegate。也就是说,集合视图正在加载单元格,并且内容大小的高度始终大于设备屏幕,因此无论集合视图是全屏,都会有内容滚动。
    6. 我期待的是什么: 在应用程序启动和视图加载时,视图控制器的主视图及其子视图(集合视图)应为320x480或320x568,具体取决于设备屏幕大小。

      实际发生的事情: 在应用程序启动和视图加载时,视图控制器的主视图调整为320x480,但集合视图停留在320x568,这是我在IB中给出的设计时尺寸。

      我也遇到了约束冲突:

      Unable to simultaneously satisfy constraints.
          Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
      (
          "<NSLayoutConstraint:0xed66060 V:[UICollectionView:0x13a79400]-(-548)-[_UILayoutGuide:0xed65c90]>",
          "<NSLayoutConstraint:0xed66090 V:[UICollectionView:0x13a79400]-(0)-[_UILayoutGuide:0xed65da0]>",
          "<_UILayoutSupportConstraint:0xed4d4e0 V:|-(0)-[_UILayoutGuide:0xed65c90]   (Names: '|':UIView:0xed65c00 )>",
          "<_UILayoutSupportConstraint:0xed65730 V:[_UILayoutGuide:0xed65da0(0)]>",
          "<_UILayoutSupportConstraint:0xed651f0 _UILayoutGuide:0xed65da0.bottom == UIView:0xed65c00.bottom>",
          "<NSAutoresizingMaskLayoutConstraint:0xed72ee0 h=--& v=--& V:[UIView:0xed65c00(480)]>"
      )
      

1 个答案:

答案 0 :(得分:0)

translatesAutoresizingMaskIntoConstraints = YES可能适用于您的顶级(主)视图,这会自动创建其他约束,这与“接口”构建器中创建的约束冲突。为您的主视图设置translatesAutoresizingMaskIntoConstraints = NO并让我们知道它是如何进行的。