在UIScrollview - Swift的末尾放置一个视图

时间:2015-12-07 15:00:01

标签: ios iphone swift uiscrollview

我的目标是在UIScrollView的末尾(右下角)设置一个UIView。我看到使用UIContentSize的解决方案,但我不想使用此属性,因为它没有适应:UIView宽度不等于UIScrollview contentSize。

UIView是UIScrollView的子视图,我只需要水平滚动。我想我必须使用约束才能将我的UIView粘贴在UIscrollview的末尾(这意味着UIView右侧与UIScrollView右侧相同,两者都具有相同的高度)

我做的是:

let horizontalConstraint = NSLayoutConstraint(item: self.myView , attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self.myScrollView , attribute:  NSLayoutAttribute.Right, multiplier: 1, constant: 0)

self.myScrollView.addConstraint(horizontalConstraint)

let verticalConstraint = NSLayoutConstraint(item: self.myView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.myScrollView, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)

self.myScrollView.addConstraint(verticalConstraint)

我对如何设置这些约束感到有些困惑和困惑,我可能错了,因为我的观点不再显示了。我是否需要定义所有约束,或者只定义一个约束,一个约束?有什么建议?感谢

编辑: 我想要的解决方案可以这样表示:enter image description here

2 个答案:

答案 0 :(得分:0)

UIScrollView从其子视图中获取内容大小,因此它只会与其包含的内容一样大。我们不能独立设置它的大小。一切都应该在子视图中。

确定您想要的myScrollView的大小:

let myViewWidth = myView.frame.width
let myViewHeight = myView.frame.height
let screenWidth = myScrollView.frame.width
let scrollContentWidth = myViewWidth + screenWidth

创建一个子视图,我们称之为widthView

let widthView = UIView(frame: CGFloat(x: 0, y: 0, width: scrollContentWidth, height: myViewHeight))
myScrollView.addSubview(widthView)

let leadingEdgeConstraint = NSLayoutConstraint(item: widthView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: myScrollView, attribute:  NSLayoutAttribute.Leading, multiplier: 1, constant: 0)
    myScrollView.addConstraint(leadingEdgeConstraint)

let trailingEdgeConstraint = NSLayoutConstraint(item: widthView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: myScrollView, attribute:  NSLayoutAttribute.Trailing, multiplier: 1, constant: 0)
    myScrollView.addConstraint(trailingEdgeConstraint)

let widthContainerConstraint = NSLayoutConstraint(item: widthView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: scrollContentWidth)
    myScrollView.addConstraint(widthContainerConstraint)

现在将myView添加到该视图中:

widthView.addSubview(myView)
myView.translatesAutoresizingMaskIntoConstraints = false

let horizontalConstraint = NSLayoutConstraint(item: myView , attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: widthView , attribute:  NSLayoutAttribute.Right, multiplier: 1, constant: 0)
    widthView.addConstraint(horizontalConstraint)

let heightConstraint = NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: myViewHeight)
    widthView.addConstraint(heightConstraint)

let widthConstraint = NSLayoutConstraint(item: myView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: myViewWidth)
    widthView.addConstraint(widthConstraint)

答案 1 :(得分:0)

感谢@Tim提供的信息,我终于在不使用其他Subview的情况下管理了这个:

解决方案:

   // Create a view

    myView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: self.myScrollView.frame.height))
    myView.backgroundColor = UIColor.redColor()
    self.myScrollView.addSubview(myView)


    //  constraints

    myView.translatesAutoresizingMaskIntoConstraints = false


    let trailingSpaceConstraint = NSLayoutConstraint(item: self.myScrollView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: myView, attribute:  NSLayoutAttribute.Trailing, multiplier: 1, constant: 0)
    myScrollView.addConstraint(trailingSpaceConstraint)

    let screenWidth = self.view.frame.width
    let leadingSpaceConstraint = NSLayoutConstraint(item: self.myView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self.myScrollView, attribute:  NSLayoutAttribute.Leading, multiplier: 1, constant: screenWidth - 15)
    myScrollView.addConstraint(leadingSpaceConstraint)



    let widthConstraint = NSLayoutConstraint(item: self.myView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute:  NSLayoutAttribute.Width, multiplier: 1, constant: 100)
    myScrollView.addConstraint(widthConstraint)

    let bottomConstraint = NSLayoutConstraint(item: self.myScrollView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.myView, attribute:  NSLayoutAttribute.Bottom, multiplier: 1, constant: 0) 
    myScrollView.addConstraint(bottomConstraint)


    let topConstraint = NSLayoutConstraint(item: self.myView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.myScrollView, attribute:  NSLayoutAttribute.Top, multiplier: 1, constant: 0)
    myScrollView.addConstraint(topConstraint)

    let heightConstraint = NSLayoutConstraint(item: self.myView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: self.myScrollView, attribute:  NSLayoutAttribute.Height, multiplier: 1, constant: 0)
    myScrollView.addConstraint(heightConstraint)