以编程方式在两个子视图之间创建约束

时间:2018-01-16 10:50:40

标签: ios swift uiscrollview autolayout

我在scrollview中有一个contentview以及其他一些视图,scrollview高度将根据contentview高度而改变,contentview的高度由其子视图的高度决定。

我正在以编程方式向contentview添加两个子视图。

@RequestMapping(value="/abc", method = RequestMethod.POST, consumes = "application/pdf") 
public ResponseEntity<String> uploadFile(@RequestBody MultipartFile file) {
    System.out.println("Inside Controller");
    return new ResponseEntity<>("true", HttpStatus.CREATED);
}

问题是contentView高度没有按照子视图增长。 因此,我的滚动视图不会增长。

  1. 当我添加第二个子视图时,我不想指定y = 210 ,我希望它的位置可以通过空间约束来计算 两个孩子的观点,有可能吗?

  2. 如何根据子视图使内容视图高度增加?

1 个答案:

答案 0 :(得分:1)

当我需要可滚动视图时我会做什么:

  1. 我在层次结构中添加scrollView并使用autolayout正确布局它,例如,如果它应该涵盖view的整个viewController

    scrollView.translatesAutoresizingMaskIntoConstraints = false
    
    NSLayoutConstraint.activate([
        scrollView.leftAnchor.constraint(equalTo: self.view.leftAnchor),
        scrollView.rightAnchor.constraint(equalTo: self.view.rightAnchor),
        scrollView.topAnchor.constraint(equalTo: self.view.topAnchor),
        scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
    ])
    
  2. 然后您需要向contentView添加scrollView并为其提供适当的布局约束,因此如果您希望在我上面开始的示例中可垂直滚动scrollView ,您需要遵循自动布局约束:

    contentView.translatesAutoresizingMaskIntoConstraints = false
    
    NSLayoutConstraint.activate([
        // horizontal anchors of contentView are constrained to scrollView superview
        // to prevent it from scrolling horizontally
        contentView.leftAnchor.constraint(equalTo: self.view.leftAnchor),
        contentView.rightAnchor.constraint(equalTo: self.view.rightAnchor),
        // but vertical anchors of contentView are constrained to
        // scrollView to allow scrolling
        contentView.topAnchor.constraint(equalTo: scrollView.topAnchor),
        contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
    ])
    

    请注意,我将leftAnchor的{​​{1}}和rightAnchor限制为contentView而不是self.view,以使其具有固定宽度。但是,top和bottom锚点被约束到scrollView,因此当scrollView需要更多空间时,它们会被展开和滚动。

  3. 现在您添加了contentView您想要的所有内容,并使用自动布局进行布局,就像contentView是一个无限高度的视图一样 - contentView将通过滚动来完整呈现它。在您的情况下,我认为您可以使用scrollView来布置这两个视图。但是,UIStackView的帧将使用自动布局计算,因此我不认为您可以依赖直接设置帧 - 因此我也使用约束来设置它们的高度(宽度将被拉伸通过stackView):

    CustomView