【问题标题】:Autolayout: y position of label is width of superview自动布局:标签的y位置是superview的宽度
【发布时间】:2015-06-18 08:37:31
【问题描述】:

示例- 如果在 iphone 5(分辨率 320x568)上,标签应放置在 320(y 位置)

【问题讨论】:

标签: ios swift autolayout


【解决方案1】:

这在代码中很容易做到。您可以添加约束并将其constant 设置为UIScreen.mainScreen().size.width

使用 Interface Builder,我将首先添加一个辅助视图,将其顶部、左侧和右侧约束设置为 0,并将其纵横比约束设置为 1:1。这意味着在宽度为 320 的屏幕上,视图框架将为 (0, 0, 320, 320)

现在您可以根据帮助视图的底部定位视图。

【讨论】:

    【解决方案2】:

    您必须将顶部约束定义为 320 像素。

    使用代码 -

    [self.button addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeTop relatedBy:0 toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:320]];
    

    来自故事板here的自动布局

    【讨论】:

    • 但是只有iphone 5是320,其他设备会不一样。
    【解决方案3】:

    在swift语言中,你可以这样使用它

    let leftConstraint = NSLayoutConstraint(item: self.label, 
                                       attribute: .Top, 
                                       relatedBy: 0,
                                          toItem: self.view,
                                       attribute: .Top, 
                                      multiplier: 1.0, 
                                        constant: 320.0);
    
    self.view.addConstraint(leftConstraint);
    

    【讨论】:

    • 但是只有iphone 5是320,其他设备会不一样。
    • 您可以找到更多详情here
    【解决方案4】:

    以这种方式将您的约束添加到标签:

    如果你希望它以编程方式进行,你可以这样做

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let label  = UILabel()
        label.backgroundColor = UIColor.redColor()
        label.textAlignment = NSTextAlignment.Center
        label.text = "I'am a test label"
        label.setTranslatesAutoresizingMaskIntoConstraints(false)
        view.addSubview(label)
        
        let horizontalConstraint = NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.TrailingMargin, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.TrailingMargin, multiplier: 1, constant: 16)
        view.addConstraint(horizontalConstraint)
        
        let verticalConstraint = NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: topLayoutGuide, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 50)
        view.addConstraint(verticalConstraint)
        
        let widthConstraint = NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 150)
        label.addConstraint(widthConstraint)
    
        
        let heightConstraint = NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 20)
        label.addConstraint(heightConstraint)
    }
    

    如果你不想以编程方式设置它,你可以这样做:

    从 storyBoard 中选择您的标签,进入 pin 菜单并将此约束添加到它,如下图所示:

    请记住,如果您希望该标签位于视图的最大 y 位置,则右侧必须设置为 0。

    希望它会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 2013-09-16
      • 1970-01-01
      • 2014-08-22
      相关资源
      最近更新 更多