【问题标题】:UIView with gradient layer not conforming to constraints set带有渐变层的 UIView 不符合约束集
【发布时间】:2016-05-07 23:07:08
【问题描述】:

viewDidLoad 中,我实例化了一个UIView 并向该UIView 添加了一个渐变层。

这在 iPhone 上运行良好,但在 iPad 上,UIView 不会伸展以填满整个屏幕。请注意以下 iPad sim 屏幕截图。

iPad simulator screenshot

我尝试通过编程方式和使用 XCode 添加约束。

似乎一旦我添加了 CAGradientLayer,UIView 不符合我设置的约束,无论是通过编程还是使用 XCode 工具。

示例代码:

gradientLayer = CAGradientLayer()
gradientLayer.frame = self.view.bounds
gradientLayer.locations = [0.5, 1.0]
gradient_View.backgroundColor = UIColor.blueColor()
let color1 = self.opus_Page_Background_Color.CGColor as CGColorRef
let color4 = self.opus_Page_Tertiary_Color.CGColor as CGColorRef
gradientLayer.colors = [color1, color4]
self.gradient_View.frame = self.view.bounds
self.gradient_View.layer.insertSublayer(gradientLayer, atIndex: 0)
gradient_View.translatesAutoresizingMaskIntoConstraints = false

let leadingConstraint = NSLayoutConstraint(item: gradient_View, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0)
            leadingConstraint.active = true
            view.addConstraint(leadingConstraint)

let trailingConstraint = NSLayoutConstraint(item: gradient_View, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 0)
            trailingConstraint.active = true
            view.addConstraint(trailingConstraint)

let widthConstraint = NSLayoutConstraint(item: gradient_View, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 100)
            view.addConstraint(widthConstraint)

let heightConstraint = NSLayoutConstraint(item: gradient_View, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 100)
            view.addConstraint(heightConstraint)
            NSLayoutConstraint.activateConstraints([leadingConstraint, trailingConstraint, widthConstraint, heightConstraint])

【问题讨论】:

  • 请按照@arun 删除宽度限制
  • 解决方案是将代码放在viewDidLayoutSubviews 中。我保留了任意约束,因为我试图查看是否有任何约束有效,但也感谢您提供的这些提示。

标签: ios swift uiview uiviewcontroller cagradientlayer


【解决方案1】:

尝试更改最后两个约束。与其匹配宽度和高度,不如将其固定到顶部和底部。问题可能是在 viewDidLoad 中,您的视图的宽度 = X,高度 = Y,但这不是最终布局。 如果这不起作用,请尝试将其添加到 viewDidLayoutSubviews 中。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    您添加了前导和尾随约束,这意味着您已经获得了视图的宽度。所以根本不需要添加宽度约束。从情节提要或以编程方式删除您正在使用的宽度。 我还可以看到缺少顶部约束。也解决了

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      相关资源
      最近更新 更多