簡體   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