簡體   English   中英

iOS界面生成器自動約束問題

[英]iOS interface builder auto constraints problem

我目前正在嘗試學習 iOS 開發,但是我被困在界面構建器中。 我想要做的實際上是非常基本的觀點。 不幸的是,我對“小於或等於”關系感到非常困惑。 我認為,如果將約束設置為小於或等於,則意味着當有足夠的空間時,它的最大大小將保持不變,否則會更小。 事實證明,無論如何,它總是具有最大的尺寸,這不是我想要實現的。

在 iPhone 11 上的界面是這樣的: 在 iPhone 11 上查看

在 iPhone 8 上的界面是這樣的: 在 iPhone 8 上查看

當然,我現在沒有關於自動約束的所有必要知識,但也許有人知道在這種情況下問題出在哪里? 我也很感激任何關於界面構建器或一些好習慣的好教程。

謝謝彼得

所以,這似乎是你所追求的。 這是在 6s 上:

在此處輸入圖片說明

這是在 iPhone 11 上的:

在此處輸入圖片說明

這是在 iPhone 6s 上旋轉的很好的衡量標准:

在此處輸入圖片說明

如您所見,有四個“組”——兩個標簽、標簽和文本字段、第二個標簽和文本字段以及按鈕。 它們在兩個屏幕上從上到下均勻分布

這是正確的想法,不是嗎?

那是怎么做的呢? 簡單的。 一個垂直堆棧視圖填充屏幕,分布設置為等間距。 在里面,一個 UIView 包含每個組(除了它自己的按鈕),每個 UIView 都由它自己的高度約束給出一個固定的高度。 還有一點,但這是問題的核心。 一旦你有了它,你當然可以根據需要進一步調整。

絕對沒有代碼; 整個事情都在 Xcode 的筆尖編輯器(“界面構建器”)中配置了一會兒。

聽起來您正在嘗試根據設備的大小在輸入之間創建間距? 我不知道它是否會像您期望的那樣,但我之前在不同的情況下都必須這樣做。 您可以使用類似NSLayoutConstraint子類的內容來滿足您的需求。 本質上,根據約束是垂直的還是水平的,這個類會在運行時計算屏幕尺寸,並根據你給它的百分比值修改約束尺寸。

/// Layout constraint to calculate size based on multiplier.
class PercentLayoutConstraint: NSLayoutConstraint {

    @IBInspectable var marginPercent: CGFloat = 0

    var screenSize: (width: CGFloat, height: CGFloat) {
        return (UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height)
    }

    override func awakeFromNib() {
        super.awakeFromNib()

        guard marginPercent > 0 else { return }
        NSNotificationCenter.defaultCenter().addObserver(self,
            selector: #selector(layoutDidChange),
            name: UIDeviceOrientationDidChangeNotification,
            object: nil)
    }

    /**
     Re-calculate constant based on orientation and percentage.
     */
    func layoutDidChange() {
        guard marginPercent > 0 else { return }

        switch firstAttribute {
        case .Top, .TopMargin, .Bottom, .BottomMargin:
            constant = screenSize.height * marginPercent
        case .Leading, .LeadingMargin, .Trailing, .TrailingMargin:
            constant = screenSize.width * marginPercent
        default: break
        }
    }

    deinit {
        guard marginPercent > 0 else { return }
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
}

來源: https : //basememara.com/percentage-based-margin-using-autolayout-storyboard/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM