未能尝试在 SWIFT 中以编程方式在滚动视图中添加 UIView 约束
Posted
技术标签:
【中文标题】未能尝试在 SWIFT 中以编程方式在滚动视图中添加 UIView 约束【英文标题】:Failing at trying to add a UIView inside a scroll view programmatically with constraints in SWIFT 【发布时间】:2016-09-28 01:24:19 【问题描述】:所以我一直在尝试以编程方式将 UIVIew 添加到带有约束的 UIScrollView。我只是在模拟器中看不到 UIView 。 我确实有一个到 UIScrollview 的 IBOutlet...所以我不确定我为什么会遇到这个问题。
override func viewDidAppear(animated: Bool)
let ownerUIView:UIView! = UIView()
var innerLabel:UILabel = UILabel()
ownerUIView.translatesAutoresizingMaskIntoConstraints = false
innerLabel.translatesAutoresizingMaskIntoConstraints = false
innerLabel.text = "Test text"
ownerUIView.addSubview(innerLabel)
importantScroll.addSubview(ownerUIView)
ownerUIView.backgroundColor = UIColor.blueColor()
let constraint1 = NSLayoutConstraint(item: ownerUIView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: importantScroll, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 10)
let constraint2 = NSLayoutConstraint(item: ownerUIView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: importantScroll, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 10)
let constraint3 = NSLayoutConstraint(item: ownerUIView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 60)
let constraint4 = NSLayoutConstraint(item: ownerUIView, attribute: .Top , relatedBy: .Equal, toItem: importantScroll, attribute: NSLayoutAttribute.Top , multiplier: 1, constant: 20)
NSLayoutConstraint.activateConstraints([constraint1,constraint2,constraint3,constraint4])
我删除了约束,但仍然看不到 UILabel 或 UIVIew。如果我删除 UILable,那么我会看到蓝色的 UIView。
let ownerUIView:UIView = UIView(frame: CGRect(x: 10, y: 10, width: 200, height: 200))
let innerLabel:UILabel = UILabel(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
ownerUIView.translatesAutoresizingMaskIntoConstraints = false
innerLabel.translatesAutoresizingMaskIntoConstraints = false
innerLabel.text = "Test text"
ownerUIView.addSubview(innerLabel)
importantScroll.addSubview(ownerUIView)
ownerUIView.backgroundColor = UIColor.blueColor()
【问题讨论】:
【参考方案1】:我认为您需要在 ownerView 和 importantScoll 之间设置相等的宽度约束,因为在没有任何适当的宽度约束之前,您的滚动视图无法确定内容大小。您可以添加此行。
let constraint5 = NSLayoutConstraint(item: ownerUIView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: importantScroll, attribute: NSLayoutAttribute.Width, multiplier: 1.0, constant: 0.0)
NSLayoutConstraint.activateConstraints([constraint1,constraint2,constraint3,constraint4,constraint5])
更新: 在 ScrollView 中布局多个子视图时,在 ScrollView 内添加另一个容器 UIView 是很常见的。所以,我首先在 Storyboard 中添加了容器 UIView。 ContainerView 与 scrollView 具有相等的宽度和高度约束,我还添加了四个约束以使 containerView 约束到 ScrollView。最后,我以编程方式设置约束如下。
let constraint6 = NSLayoutConstraint(item: ownerView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: containerView, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 40)
let constraint7 = NSLayoutConstraint(item: containerView, attribute: .Tailing, relatedBy: .Equal, toItem: ownerView, attribute: .Trailing, multiplier: 1, constant: 10)
let constraint8 = NSLayoutConstraint(item: ownerView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 60)
let constraint9 = NSLayoutConstraint(item: ownerView, attribute: .Top , relatedBy: .Equal, toItem: containerView, attribute: NSLayoutAttribute.Top , multiplier: 1, constant: 20)
containerView.addConstraints([constraint6,constraint7,constraint8,constraint9])
【讨论】:
您好...谢谢您...有没有办法让 UIView 的右侧达到 10 边距? 您是否有任何理由以编程方式设置约束?如果您在情节提要中应用自动布局,这将非常简单。可以参考这个link。以上是关于未能尝试在 SWIFT 中以编程方式在滚动视图中添加 UIView 约束的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Swift 中以编程方式设置 rightBarButton