【问题标题】:AutoLayout: Child View goes Over Parent View's Bounds自动布局:子视图超出父视图的边界
【发布时间】:2017-02-23 16:55:58
【问题描述】:

我是 iOS 开发新手。我有一个contentView 用于UICollectionViewCell,我想为其添加另一个视图。我希望将这个新视图延伸到contentView 边缘。我正在尝试使用 AutoLayout 来实现这一点,所以这就是我所做的:

let view = UIView();
view.backgroundColor = UIColor.yellow
contentView.addSubview(view)

view.translatesAutoresizingMaskIntoConstraints = false
view.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true
view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor).isActive = true
view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor).isActive = true

这按预期工作,我得到了我想要的行为。然后我希望contentView 有 18 个点的填充,所以我想我需要添加常量参数并将其设置为 18,如下所示:

view.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 18).isActive = true
view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 18).isActive = true
view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 18).isActive = true
view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: 18).isActive = true

我所期待的是,现在新视图的面积会比以前更小,因为它现在从各个方向被推了 18 个点。我得到的是一个与第一个场景大小相同的视图,它从顶部和左侧被推了 18 个点,并超过了contentView 的边界!

你能告诉我我的代码有什么问题吗?

【问题讨论】:

  • 尝试使用 -18 代替顶部和左侧
  • 如果您愿意不使用 AutoLayout,只需一行即可轻松完成:view.frame = contentView.bounds.insetBy(dx: 18, dy: 18)

标签: ios swift autolayout uicollectionviewcell


【解决方案1】:

你的常量都指向同一个方向,所以视图只是偏移了。

这应该可行:

view.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 18).isActive = true
view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -18).isActive = true
view.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 18).isActive = true
view.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -18).isActive = true

【讨论】:

    猜你喜欢
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多