gpt4 book ai didi

ios - 没有 Interface Builder 的 UIScrollView 和 Autolayout - ScrollView 如何获得它的高度?

转载 作者:行者123 更新时间:2023-11-28 09:09:26 26 4
gpt4 key购买 nike

我正在使用 Interface Builder/storyboards 来掌握 Xcode 6 和 iOS autolayout/constraints,但目前正在努力处理 ScrollView 。

我已经编写了以下代码(在我学习的过程中都是手写的!)它在屏幕上放置了一个包含内容 View 的 ScrollView ,而内容 View 又包含了几个额外的 View 。

滚动事件会在我滚动时正常触发。我遇到的问题是,当我放手时, ScrollView 只是弹回到开始,这表明它没有接收到内容高度。我认为。或者,也许我在某处搞砸了约束条件?

任何人都可以给我一些关于我可能在哪里出错的指示吗?

谢谢。

class TestScrollController: UIViewController, UIScrollViewDelegate {


var scrollView: UIScrollView!
var contentView = UIView()
var blueView = UIView()
var orangeView = UIView()



override func viewDidLoad() {
super.viewDidLoad()

var superView = self.view

var scrollView = UIScrollView()
scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)
scrollView.scrollEnabled = true
scrollView.alwaysBounceVertical = true
scrollView.backgroundColor = UIColor.brownColor()
scrollView.delegate = self
superView.addSubview(scrollView);

var contentView = UIView()
contentView.setTranslatesAutoresizingMaskIntoConstraints(false)
contentView.backgroundColor = UIColor.greenColor()
scrollView.addSubview(contentView)

let blueView = UIView()
blueView.setTranslatesAutoresizingMaskIntoConstraints(false)
blueView.backgroundColor = UIColor.blueColor()
contentView.addSubview(blueView);

let orangeView = UIView()
orangeView.setTranslatesAutoresizingMaskIntoConstraints(false)
orangeView.backgroundColor = UIColor.orangeColor()
contentView.addSubview(orangeView);




//scrollview Constraints
let scrollViewConstraintTop = NSLayoutConstraint(
item: scrollView,
attribute: .Top,
relatedBy: .Equal,
toItem: superView,
attribute: .Top,
multiplier: 1.0,
constant: 0
)
superView.addConstraint(scrollViewConstraintTop)

let scrollViewConstraintRight = NSLayoutConstraint(
item: scrollView,
attribute: .Trailing,
relatedBy: .Equal,
toItem: superView,
attribute: .Right,
multiplier: 1.0,
constant: 0
)
superView.addConstraint(scrollViewConstraintRight)

let scrollViewConstraintBottom = NSLayoutConstraint(
item: scrollView,
attribute: .Bottom,
relatedBy: .Equal,
toItem: superView,
attribute: .Bottom,
multiplier: 1.0,
constant: 0
)
superView.addConstraint(scrollViewConstraintBottom)

let scrollViewConstraintLeft = NSLayoutConstraint(
item: scrollView,
attribute: .Leading,
relatedBy: .Equal,
toItem: superView,
attribute: .Left,
multiplier: 1.0,
constant: 0
)
superView.addConstraint(scrollViewConstraintLeft)



//contentView Constraints
let contentViewConstraintTop = NSLayoutConstraint(
item: contentView,
attribute: .Top,
relatedBy: .Equal,
toItem: scrollView,
attribute: .Top,
multiplier: 1.0,
constant: 0
)
superView.addConstraint(contentViewConstraintTop)

let contentViewConstraintRight = NSLayoutConstraint(
item: contentView,
attribute: .Trailing,
relatedBy: .Equal,
toItem: scrollView,
attribute: .Right,
multiplier: 1.0,
constant: 0
)
superView.addConstraint(contentViewConstraintRight)

let contentViewConstraintBottom = NSLayoutConstraint(
item: contentView,
attribute: .Bottom,
relatedBy: .Equal,
toItem: scrollView,
attribute: .Bottom,
multiplier: 1.0,
constant: 0
)
superView.addConstraint(contentViewConstraintBottom)

let contentViewConstraintLeft = NSLayoutConstraint(
item: contentView,
attribute: .Leading,
relatedBy: .Equal,
toItem: scrollView,
attribute: .Left,
multiplier: 1.0,
constant: 0
)
superView.addConstraint(contentViewConstraintLeft)



//blueView Constraints
let blueViewConstraintHeight = NSLayoutConstraint(
item: blueView,
attribute: .Height,
relatedBy: .Equal,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 1.0,
constant: 100.0
)
superView.addConstraint(blueViewConstraintHeight)

let blueViewConstraintTop = NSLayoutConstraint(
item: blueView,
attribute: .Top,
relatedBy: .Equal,
toItem: contentView,
attribute: .Top,
multiplier: 1.0,
constant: 50.0
)
superView.addConstraint(blueViewConstraintTop)

let blueViewConstraintLeft = NSLayoutConstraint(
item: blueView,
attribute: .Leading,
relatedBy: .Equal,
toItem: superView,
attribute: .Left,
multiplier: 1.0,
constant: 50.0
)
superView.addConstraint(blueViewConstraintLeft)

let blueViewConstraintRight = NSLayoutConstraint(
item: blueView,
attribute: .Trailing,
relatedBy: .Equal,
toItem: superView,
attribute: .Right,
multiplier: 1.0,
constant: -50.0
)
superView.addConstraint(blueViewConstraintRight)



//orangeView Constraints
let orangeViewConstraintWidth = NSLayoutConstraint(
item: orangeView,
attribute: .Width,
relatedBy: .Equal,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 1.0,
constant: 100.0
)
superView.addConstraint(orangeViewConstraintWidth)

let orangeViewConstraintHeight = NSLayoutConstraint(
item: orangeView,
attribute: .Height,
relatedBy: .Equal,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 1.0,
constant: 100.0
)
superView.addConstraint(orangeViewConstraintHeight)


let orangeViewConstraintTop = NSLayoutConstraint(
item: orangeView,
attribute: .Top,
relatedBy: .Equal,
toItem: blueView,
attribute: .Bottom,
multiplier: 1.0,
constant: 400.0
)
superView.addConstraint(orangeViewConstraintTop)

let orangeViewConstraintBottom = NSLayoutConstraint(
item: orangeView,
attribute: .Bottom,
relatedBy: .Equal,
toItem: contentView,
attribute: .Bottom,
multiplier: 1.0,
constant: 400.0
)
superView.addConstraint(orangeViewConstraintBottom)


let orangeViewConstraintCenterX = NSLayoutConstraint(
item: orangeView,
attribute: .CenterX,
relatedBy: .Equal,
toItem: blueView,
attribute: .CenterX,
multiplier: 1.0,
constant: 0.0
)
superView.addConstraint(orangeViewConstraintCenterX)


}




func scrollViewDidScroll(scrollView: UIScrollView) {
println("scrollViewDidScroll")
}




}

最佳答案

您可以使用 .contentsize(CGRECT) 设置 inside UIScrollView
内容的大小由于您没有设置 contentSize,因此您无法滚动到任何内容

关于ios - 没有 Interface Builder 的 UIScrollView 和 Autolayout - ScrollView 如何获得它的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29781816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com