繁体   English   中英

斯威夫特:如何在屏幕边框上制作标签?

[英]Swift: How to make a label in the borders of the screen?

我正在尝试创建一个在屏幕上随机生成标签的游戏​​,但是整个单词必须在屏幕内。 屏幕上还有一个文本字段,打算将这些单词放在下面。

我有一个用于添加标签的功能,另一个用于确保它在边界内。

func addWord(word: String) {
    let screenSize: CGRect = UIScreen.mainScreen().bounds
    let screenWidth = UInt32(screenSize.width)
    let screenHeight = UInt32(screenSize.height)
    let label = UILabel()
    label.text = word
    label.font = UIFont.systemFontOfSize(32)
    label.sizeToFit()
    label.backgroundColor = UIColor.whiteColor()

    let x = CGFloat(arc4random_uniform(screenWidth))
    let y = CGFloat(arc4random_uniform(screenHeight))

    label.center = CGPointMake(x, y)
    label.center = checkBounds(label, minX: 0, maxX: CGFloat(screenWidth), minY: (newWordsTextField.bounds.origin.y+newWordsTextField.bounds.maxY), maxY: CGFloat(screenHeight))
    view.addSubview(label)

    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.handlePanGesture(_:)))
    label.addGestureRecognizer(panGesture)
    label.userInteractionEnabled = true
}

func checkBounds(label: UILabel, minX: CGFloat, maxX: CGFloat, minY: CGFloat, maxY: CGFloat)->CGPoint{
    let borders = label.bounds
    var newCenter = label.center
    if borders.minX < minX {
        newCenter.x = newCenter.x + (minX-borders.minX)
    }
    if borders.maxX > maxX {
        newCenter.x = newCenter.x-(borders.maxX-maxX)
    }
    if borders.minY < minY {
        newCenter.y = newCenter.y + (minY-borders.minY)
    }
    if borders.maxY > maxY {
        newCenter.y = newCenter.y-(borders.maxY-maxY)
    }
    return newCenter
}

但是由于某种原因,即使函数应确保不会发生这种情况,标签也会越过边界。 我是新手,这是我第一次尝试这样的事情,请帮忙,我在做什么错?

如果您使用的是自动版式(几乎可以肯定是因为这是默认设置,必须手动将其关闭),则视图对象的框架和中心会被自动版式约束所覆盖(无论是您定义还是系统创建的约束)自动)。

如果要手动添加视图,则还需要添加约束。 那应该解决您的问题。 我建议使用谷歌搜索“通过代码添加UIViews和约束”或类似的方法来查找有关如何完成操作的教程(或者更好的方法是在情节提要中添加视图并将其标记为隐藏,直到需要它们为止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM