
我有一个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旁边?
为什么会发生这种情况仍然是一个谜,据我所知,我的水平定位约束应该没问题.没有任何错误.但希望提供我的问题的原因,将有助于解决它.
任何帮助将不胜感激! (我没有尝试在控制台中造成任何错误.)
解决方法 我看到有两个可能的错误:>我没有看到对于contentVIEw左右的约束.我相信它们都应该为零.否则,contentVIEw的位置将在scrollVIEw中随机.这应该通过用H代替H:[contentVIEw(contentWIDth)]来修复:| [contentVIEw(contentWIDth)] |
>对contentVIEw宽度使用self.vIEw.bounds.wIDth可能有点冒险 – 取决于您调用它的方法.你确定它与屏幕的大小相等吗?
请注意,通常在Interface Builder中设置约束更容易,因为它始终会警告您缺少约束.
总结以上是内存溢出为你收集整理的ios – 水平约束在UIScrollView中无法正常工作. (程序约束)全部内容,希望文章能够帮你解决ios – 水平约束在UIScrollView中无法正常工作. (程序约束)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)