热门使用布局约束以编程方式将视图添加到Scrollview

时间:2016-11-10 11:21:34

标签: ios swift uiscrollview autolayout nslayoutconstraint

我正在试图以编程方式在UIScrollView中查看视图,但这里没有显示我的代码:

mainScrollView.translatesAutoresizingMaskIntoConstraints = false


        self.view.addSubview(mainScrollView)

        //Add Trailing
        let trailingConstraint = NSLayoutConstraint(item: mainScrollView, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1, constant: 0)
        self.view.addConstraint(trailingConstraint)

        //Add Leading
        let leadingConstraint = NSLayoutConstraint(item: mainScrollView, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1, constant: 0)
        self.view.addConstraint(leadingConstraint)

        //Add Top
        let topConstraint = NSLayoutConstraint(item: mainScrollView, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: 0)
        self.view.addConstraint(topConstraint)

        //Add Bottom
        let bottomConstraint = NSLayoutConstraint(item: mainScrollView, attribute: .bottom, relatedBy: .equal, toItem: self.view, attribute: .bottom, multiplier: 1, constant: 0)
        self.view.addConstraint(bottomConstraint)

        let contentView = UIView()
        contentView.translatesAutoresizingMaskIntoConstraints = false
        contentView.backgroundColor = .blue
        mainScrollView.addSubview(contentView)

        //Add Trailing
        let trailingConstraintContent = NSLayoutConstraint(item: contentView, attribute: .trailing, relatedBy: .equal, toItem: mainScrollView, attribute: .trailing, multiplier: 1, constant: 0)
        mainScrollView.addConstraint(trailingConstraintContent)

        //Add Leading
        let leadingConstraintContent = NSLayoutConstraint(item: contentView, attribute: .leading, relatedBy: .equal, toItem: mainScrollView, attribute: .leading, multiplier: 1, constant: 0)
        mainScrollView.addConstraint(leadingConstraintContent)

        //Add Top
        let topConstraintContent = NSLayoutConstraint(item: contentView, attribute: .top, relatedBy: .equal, toItem: mainScrollView, attribute: .top, multiplier: 1, constant: 0)
        mainScrollView.addConstraint(topConstraintContent)

        //Add Bottom
        let bottomConstraintContent = NSLayoutConstraint(item: contentView, attribute: .bottom, relatedBy: .equal, toItem: mainScrollView, attribute: .bottom, multiplier: 1, constant: 0)
        mainScrollView.addConstraint(bottomConstraintContent)

插入了第一个ScrollView,因为我添加了背景颜色,我可以看到它,但我看不到内容视图添加为背景颜色为蓝色。

任何帮助?

更新

我尝试了以下内容但没有成功:

mainScrollView.translatesAutoresizingMaskIntoConstraints = false
        let contentView = UIView()
        contentView.translatesAutoresizingMaskIntoConstraints = false

        mainScrollView.backgroundColor = .red
        contentView.backgroundColor = .blue

        self.view.addSubview(mainScrollView)
        mainScrollView.addSubview(contentView)

        let viewsDictionary = ["mainScrollView": mainScrollView, "contentView": contentView]

        let mainScrollViewVerticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|[mainScrollView]|", options: [], metrics: nil, views: viewsDictionary)
        let mainScrollViewHorizontalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "H:|[mainScrollView]|", options: [], metrics: nil, views: viewsDictionary)
        self.view.addConstraints(mainScrollViewVerticalConstraint)
        self.view.addConstraints(mainScrollViewHorizontalConstraint)

        let contentViewVerticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|[contentView]|", options: [], metrics: nil, views: viewsDictionary)
        let contentViewHorizontalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "H:|[contentView]|", options: [], metrics: nil, views: viewsDictionary)
        mainScrollView.addConstraints(contentViewVerticalConstraint)
        mainScrollView.addConstraints(contentViewHorizontalConstraint)

2 个答案:

答案 0 :(得分:0)

添加子视图时,要记住的重要事项是将它们固定在一起以使Auto Layout可以评估高度,这是因为滚动视图通过确定高度子视图的总和来确定内容大小(如果是垂直的)。 所以你应该用VFL指定高度。例如

$(".flexslider-hospital").flexslider({
    animation: "slide",
    animationLoop: false,
    itemWidth: 210,
    itemMargin: 48,
    pausePlay: false
    });

答案 1 :(得分:-2)

  • 使用.xib文件
  • 创建自定义视图
  • 在.xib(自动布局)
  • 中应用自定义视图子组件的约束
  • 创建自定义视图即时

    MyView * myview = [[[NSBundle mainBundle] loadNibNamed:@“nibName”owner:nil options:nil] objectAtIndex:0];

  • 将屏幕宽度设置为

    CGRect screenSize = [UIScreen mainScreen] .bounds.size; myView = CGRectMake(0.0,0.0,screenSize.width,100.0);

  • 添加到父视图

    [parentView addSubView:myView];