0

我在构建约束方面遇到问题。我是使用视觉格式语言的新手。我需要帮助。我对两个图像进行了限制,高度还可以,但水平放置已关闭。它们似乎以不同的长度放置在不同的设备上。我试图将它们保持在一个按钮的中心,但是尽管手机的宽度很大,但这两个图像始终遵循左侧和右侧的 -70- 。如何让它适应手机的宽度?哦,考虑我有图像 setTranslatesAutoresizingMaskIntoConstraints(false)

// Constraint Views
        let views = ["view": view,
                     "topHeader": topHeader,
                     "topBannerView": topBannerView,
                     "backGroundView": backGroundView,
                     "wolLogoView":wolLogoView,
                     "backGround2View": backGround2View,
                     "pictureView": pictureView,
                     "wolMottoView": wolMottoView,
                     "menuButton": menuButton,
                     "buttonMenuView": buttonMenuView,
                     "featListings": featListings,
                     "scrollView": scrollView,
                     "button1": button1,
                     "busLogoView": busLogoView,
                     "button2": button2,
                     "classLogoView": classLogoView,
                     "button3": button3,
                     "forwardLogoView": forwardLogoView,
            ]

        // CONSTRAINTS -----------------------------------------------------

        // backGround
        var constHBackground = NSLayoutConstraint.constraintsWithVisualFormat("H:|[backGround2View]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHBackground)
        var constVBackground = NSLayoutConstraint.constraintsWithVisualFormat("V:|-17-[backGround2View(>=100)]-0-[backGroundView(==backGround2View)]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVBackground)


        // topHeader
        var constHHeader = NSLayoutConstraint.constraintsWithVisualFormat("H:[view]-(<=0)-[topHeader(==view)]", options: .AlignAllTop, metrics: nil, views: views)
        view.addConstraints(constHHeader)
        var constVHeader = NSLayoutConstraint.constraintsWithVisualFormat("V:[view]-(<=0)-[topHeader(17)]", options: .AlignAllCenterX, metrics: nil, views: views)
        view.addConstraints(constVHeader)


        // topBannerView
        var constHBanner = NSLayoutConstraint.constraintsWithVisualFormat("H:|[topBannerView(==view)]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHBanner)
        var constVBanner = NSLayoutConstraint.constraintsWithVisualFormat("V:|-17-[topBannerView(50)]|", options: .AlignAllCenterX, metrics: nil, views: views)
        view.addConstraints(constVBanner)

        // wolLogo
        var constHWolLogo = NSLayoutConstraint.constraintsWithVisualFormat("H:|-55-[wolLogoView(>=0)]-60-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHWolLogo)
        var constVWolLogo = NSLayoutConstraint.constraintsWithVisualFormat("V:|-10-[wolLogoView(28)]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVWolLogo)

        // picture view
        var constHPic = NSLayoutConstraint.constraintsWithVisualFormat("H:|[pictureView]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHPic)
        var constVPic = NSLayoutConstraint.constraintsWithVisualFormat("V:|-85-[pictureView(>=0)]-0-[backGroundView]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVPic)

        // wolMotto
        var constHWolMotto = NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[wolMottoView(>=0)]-20-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHWolMotto)
        var constVWolMotto = NSLayoutConstraint.constraintsWithVisualFormat("V:|-69-[wolMottoView(35)]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVWolMotto)

        // menuButton
        var constHMenuButton = NSLayoutConstraint.constraintsWithVisualFormat("H:|[menuButton(40)]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHMenuButton)
        var constVMenuButton = NSLayoutConstraint.constraintsWithVisualFormat("V:|-22-[menuButton(40)]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVMenuButton)

        // buttonMenuView
        var constHButtonMenu = NSLayoutConstraint.constraintsWithVisualFormat("H:|[buttonMenuView(==menuButton)]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHButtonMenu)
        var constVButtonMenu = NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[buttonMenuView(==menuButton)]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVButtonMenu)

        // featListings
        var constHFeatListing = NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[featListings]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHFeatListing)
        var constVFeatListing = NSLayoutConstraint.constraintsWithVisualFormat("V:|-85-[pictureView][featListings][scrollView]-130-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVFeatListing)

        // button3
        var constHButton3 = NSLayoutConstraint.constraintsWithVisualFormat("H:|-(>=0)-[button3(100)]-(<=0)-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHButton3)
        var constVButton3 = NSLayoutConstraint.constraintsWithVisualFormat("V:|-85-[pictureView][button3][scrollView]-130-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVButton3)

        // forwardLogoView
        var constHForwardLogoView = NSLayoutConstraint.constraintsWithVisualFormat("H:|-(>=0)-[forwardLogoView(23)]-(<=0)-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHForwardLogoView)
        var constVForwardLogoView = NSLayoutConstraint.constraintsWithVisualFormat("V:|-85-[pictureView][forwardLogoView(>=0)][scrollView]-130-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVForwardLogoView)

        // scrollView
        var constHScrollView = NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollView]|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHScrollView)
        var constVScrollView = NSLayoutConstraint.constraintsWithVisualFormat("V:|-85-[pictureView]-30-[scrollView(>=0)]-130-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVScrollView)

        // button1 and button2
        var constHButton1 = NSLayoutConstraint.constraintsWithVisualFormat("H:|-15-[button1(<=220)]-20-[button2(==button1)]-15-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHButton1)
        var constVButton1 = NSLayoutConstraint.constraintsWithVisualFormat("V:|-85-[pictureView]-30-[scrollView(>=0)]-20-[button1(80)]-25-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVButton1)
        var constVButton2 = NSLayoutConstraint.constraintsWithVisualFormat("V:|-85-[pictureView]-30-[scrollView(>=0)]-20-[button2(80)]-25-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVButton2)

        // busLogoView and classLogoView
        var constHBusLogoView = NSLayoutConstraint.constraintsWithVisualFormat("H:|-50-[busLogoView]-100-[classLogoView(==busLogoView)]-50-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constHBusLogoView)
        var constVBusLogoView = NSLayoutConstraint.constraintsWithVisualFormat("V:|-85-[pictureView]-30-[scrollView(>=0)]-20-[busLogoView(<=50)]-45-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVBusLogoView)
        var constVClassLogoView = NSLayoutConstraint.constraintsWithVisualFormat("V:|-85-[pictureView]-30-[scrollView(>=0)]-20-[classLogoView(==busLogoView)]-45-|", options: nil, metrics: nil, views: views)
        view.addConstraints(constVClassLogoView)

我知道这很难看哈哈。就像我说的,这是我第一次做约束。对不起!

4

1 回答 1

2

好的,只需编辑您的约束以删除过度约束视图,我可以将其归结为...

// busLogoView and classLogoView
var constHBusLogoView = NSLayoutConstraint.constraintsWithVisualFormat("|-70-[busLogoView][classLogoView(==busLogoView)]-70-|", 
                                                                       options: nil,
                                                                       metrics: nil,
                                                                       views: views)
view.addConstraints(constHBusLogoView)
var constVBusLogoView = NSLayoutConstraint.constraintsWithVisualFormat("V:|-85-[pictureView]-30-[scrollView]-20-[busLogoView(<=50)]-45-|",
                                                                       options: nil,
                                                                       metrics: nil,
                                                                       views: views)
view.addConstraints(constVBusLogoView)
var constVClassLogoView = NSLayoutConstraint.constraintsWithVisualFormat("V:[scrollView]-20-[classLogoView(==busLogoView)]-45-|",
                                                                         options: nil,
                                                                         metrics: nil,
                                                                         views: views)
view.addConstraints(constVClassLogoView)

关于更改的一些说明。

  1. 为宽度或高度添加>=0约束是多余的,因为在 AutoLayout 中所有视图都必须具有正尺寸。因此,您根本不能添加约束。
  2. 在第二组约束中,您已经定位了图片视图和滚动视图。您无需在第三组中再次定位它们。
  3. 在第一组中,您添加了一个]-0-[空格。您可以使用][.
  4. 在第一组约束中,您在总线和类视图之间添加了等宽约束。但是您还说 bus 应该是<=50,并且您还给出了从 superview 的左侧到右侧的约束。这是危险的,因为如果超级视图超过 240 (70 + 70 + 50 + 50),那么这些约束将相互冲突(类和总线不能具有相同的宽度,而总线小于或等于 50 宽度,因为那不能添加最多超过 240 个)。

我怀疑可能是 4 号导致了您的问题(可能不是),但应用这些修复程序并让我知道会发生什么。

编辑

实际上,再看一遍,您似乎已经在其他地方限制了图片视图和滚动视图,因此您根本不需要图片视图...

// busLogoView and classLogoView
var constHBusLogoView = NSLayoutConstraint.constraintsWithVisualFormat("|-70-[busLogoView][classLogoView(==busLogoView)]-70-|", 
                                                                       options: nil,
                                                                       metrics: nil,
                                                                       views: views)
view.addConstraints(constHBusLogoView)
var constVBusLogoView = NSLayoutConstraint.constraintsWithVisualFormat("V:[scrollView]-20-[busLogoView(<=50)]-45-|",
                                                                       options: nil,
                                                                       metrics: nil,
                                                                       views: views)
view.addConstraints(constVBusLogoView)
var constVClassLogoView = NSLayoutConstraint.constraintsWithVisualFormat("V:[scrollView]-20-[classLogoView(==busLogoView)]-45-|",
                                                                         options: nil,
                                                                         metrics: nil,
                                                                         views: views)
view.addConstraints(constVClassLogoView)
于 2014-12-11T17:29:35.733 回答