我有一个UIScrollView,这是“self.view”的子视图.
我的UIScrollview有一个名为contentView的子视图
我的所有其他对象都是contentView或它的子视图的子视图
除了2个视图外,我看起来一切正常.
一旦我在约束中添加这些视图.整个contentView向左移动,并打破了一切.
这是一个名为(howManyIconView)的麻烦视图的屏幕图像,它是蓝色的UIView,中间有一个白色的松弛图标. (左下方)
为了让每个人都明白这是内容视图搞砸了,我给了contentView一个红色背景.
这是相同的视图,没有将howManyIconView添加到我的约束.
从与顶部开始到与问题相关的实际代码.
contentView.setTranslatesAutoresizingMaskIntoConstraints(false) scrollView.addSubview(contentView) howManyContentView.setTranslatesAutoresizingMaskIntoConstraints(false) contentView.addSubview(howManyContentView) howManyIconView.setTranslatesAutoresizingMaskIntoConstraints(false) howManyIconView.backgroundColor = UIColor.formulaBlueColor() howManyContentView.addSubview(howManyIconView) howManyIcon.setTranslatesAutoresizingMaskIntoConstraints(false) howManyIcon.textColor = UIColor.formulaWhiteColor() howManyIcon.font = UIFont(name: "fontAwesome",size: 20) howManyIcon.text = "" howManyIconView.addSubview(howManyIcon)
这是限制因素:
var viewsDictionary = ["contentView":contentView,"howManyContentView":howManyContentView,"howManyLabel":howManyLabel,"howManyInputField":howManyInputField,"howManyIconView":howManyIconView,"howManyIcon":howManyIcon] let metricsDictionary = ["topBarHeight":6,"numbersViewRowHeight":49,"numbersViewSeperatorHeight":1,"inputFieldHeight":75,"contentWidth":self.view.bounds.width,"grapViewHeight":175,"inputFieldWidth":100,"iconViewWidth":50] scrollView.addConstraints( NSLayoutConstraint.constraintsWithVisualFormat( "H:[contentView(contentWidth)]",options: NSLayoutFormatOptions(0),metrics: metricsDictionary,views: viewsDictionary)) howManyContentView.addConstraints( NSLayoutConstraint.constraintsWithVisualFormat( "V:[howManyIconView(inputFieldHeight)]",views: viewsDictionary)) howManyContentView.addConstraints( NSLayoutConstraint.constraintsWithVisualFormat( "V:[howManyInputField(inputFieldHeight)]",views: viewsDictionary)) contentView.addConstraints( NSLayoutConstraint.constraintsWithVisualFormat( "H:|[howManyContentView]|",options: nil,metrics: nil,views: viewsDictionary)) howManyContentView.addConstraint(NSLayoutConstraint(item:howManyLabel,attribute:NSLayoutAttribute.CenterY,relatedBy:NSLayoutRelation.Equal,toItem:howManyContentView,multiplier:1.0,constant:0)) howManyContentView.addConstraint(NSLayoutConstraint(item:howManyInputField,constant:0)) howManyContentView.addConstraint(NSLayoutConstraint(item:howManyIconView,constant:0)) howManyIconView.addConstraint(NSLayoutConstraint(item:howManyIcon,toItem:howManyIconView,attribute:NSLayoutAttribute.CenterX,constant:0)) howManyContentView.addConstraints( NSLayoutConstraint.constraintsWithVisualFormat( "H:|-32-[howManyLabel]",views: viewsDictionary))
下面的约束,是一个混乱一切.一旦我从这一行代码中删除[howManyIconView(iconViewWidth)],一切都很好.
howManyContentView.addConstraints( NSLayoutConstraint.constraintsWithVisualFormat( "H:[howManyIconView(iconViewWidth)][howManyInputField(inputFieldWidth)]-32-|",views: viewsDictionary))
我已经三次检查了howManyContentView,howManyIconView和howManyIcon在这篇文章中未显示的任何代码中都没有提到.
这是我试图解决我的问题
首先,我尝试创建另一个名为HowManyInputView的视图,在其中我将iconView和UITextField放入其中.然后将其作为唯一约束. (同样的结果)
之后我尝试删除与iconView中的UILabel有关的所有内容.看看它是否与标签有关. (结果相同)
然后我尝试制作一个新视图.并给它类似(但不一样)的位置约束(同样的问题),这个视图也没有任何子视图,进一步表明它是视图而不是UILabel导致我的问题.
所以我尝试在2中分割我的水平约束.之前你可以在代码中看到.我在同一行代码中给它一个宽度和一个水平约束.所以我为它制作了两条不同的约束线,一条用于水平尺寸,另一条用于定位它. (同样的结果)
在这一点上,我没有想法.所以我删除了Derived Data文件夹,并清理了我的项目. (还是行不通)
接下来,我尝试打印有问题的视图的约束.使用constraintsAffectingLayoutForAxis如下:
println("Horizontal: \(howManyIconView.constraintsAffectingLayoutForAxis(UILayoutConstraintAxis.Horizontal))") println("Vertical: \(howManyIconView.constraintsAffectingLayoutForAxis(UILayoutConstraintAxis.Vertical))")
这就是控制台打印出来的内容:
Horizontal: [<NSLayoutConstraint:0x174299050 H:[UIView:0x17019df60(50)]>] Vertical: [<NSLayoutConstraint:0x17429aae0 V:|-(0)-[UIView:0x17019df60] (Names: '|':UIView:0x17019ddc0 )>,<NSLayoutConstraint:0x17429ab30 V:[UIView:0x17019df60]-(0)-| (Names: '|':UIView:0x17019ddc0 )>]
除非我读错了.看起来iconView仅获得(50)的大小限制,而不是实际的位置水平约束.尽管被正确放在我的UITextField旁边?
为什么会发生这种情况仍然是一个谜,据我所知,我的水平定位约束应该没问题.没有任何错误.但希望提供我的问题的原因,将有助于解决它.
任何帮助将不胜感激! (我没有尝试在控制台中造成任何错误.)