【问题标题】:Constraints Overlapping, Swift Xcode约束重叠,Swift Xcode
【发布时间】:2018-01-21 20:33:27
【问题描述】:

我正在使用 swift 在 Xcode 中创建自定义键盘。一切运行良好,但我遇到了限制问题。我会解释我做了什么以及我想要做什么。

我做了什么:1)我创建了一个“世界”按钮,它将在 iOS 默认键盘和自定义键盘之间切换。无论加载到什么设备上(iPhone 5、6、7 iPad 等),它都被限制在视图的左下方。 2)然后我创建了一个集合视图,无论设备如何,该视图都被限制为从世界按钮的边缘开始。 3)我创建了一个删除按钮,该按钮被限制在视图的右下角,无论设备如何。

我想要做什么:1)我希望集合视图从世界按钮开始并在删除按钮结束,无论设备如何。

我遇到的问题是删除按钮与较小设备上的集合视图重叠。我希望集合视图在删除按钮处停止,但无法弄清楚为什么我的约束不起作用。

这些是集合视图的相关约束。

// create the constraints

// leading constraint
let categoriesCollectionViewLeadingConstraint = NSLayoutConstraint(item: categoriesCollectionView, attribute: NSLayoutAttribute.leading, relatedBy:    NSLayoutRelation.equal, toItem: backButton, attribute:   NSLayoutAttribute.trailing, multiplier: 1, constant: 0)

// add the leading constraint
view.addConstraint(categoriesCollectionViewLeadingConstraint)

// bottom constraint
let categoriesCollectionViewBottomConstraint = NSLayoutConstraint(item: categoriesCollectionView, attribute: NSLayoutAttribute.bottom, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.bottom, multiplier: 1, constant: 0)

// add the bottom constraint
view.addConstraint(categoriesCollectionViewBottomConstraint)

// trailing constraint
let categoriesCollectionViewTrailingConstraint = NSLayoutConstraint(item: categoriesCollectionView, attribute: NSLayoutAttribute.trailing, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.trailing, multiplier: 1, constant: 0)

// set the priority to less than 1000 so it works correctly
categoriesCollectionViewTrailingConstraint.priority = 999

// add the trailing constraint
view.addConstraint(categoriesCollectionViewTrailingConstraint)

【问题讨论】:

    标签: ios swift xcode button constraints


    【解决方案1】:

    我认为你应该像这样限制你的集合视图:

       // trailing constraint
    let categoriesCollectionViewTrailingConstraint = NSLayoutConstraint(item: categoriesCollectionView, attribute: NSLayoutAttribute.trailing, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.trailing, multiplier: 1, constant: - deleteButtonWidth)
    

    【讨论】:

    • 我原来是这样写的。在我的脑海中,代码说“从 worldButton 开始,在 crossButton 结束”。但是,当这样写时,键盘将无法加载。
    • @HarrisonBateman 我更新了约束,看看它是否对你有帮助,我已将常量设置为 deleteButton 宽度的负数
    • 效果很好!如果最终类别过多,我已经编写了代码以允许我水平滚动。所以现在我可以滚动最后一点,deleteButton 不再与 collectionView 重叠!非常感谢!还有一个问题......是否可以强制集合视图混合在一起,以便无论屏幕大小如何,我都可以始终看到所有类别?还是在约束内部没有固定?
    • @HarrisonBateman 是的,您可以实现名为 sizeForItemAtIndexPath 的 UICollectionViewDelegateFlowLayout 方法
    • 太棒了!我会调查的!非常感谢您的帮助!
    猜你喜欢
    • 2016-02-21
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2016-10-18
    • 2017-07-02
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多