簡體   English   中英

在 swift 中將內容的前導邊距設置為導航欄大標題的前導

[英]setting leading margin of content to the leading of navigation bar large title in swift

我有一個關於使用自動布局對齊內容的問題。

我有一個大導航欄和導航欄正下方的一個 UIView。 我想將 UIView 的前導錨設置為與導航欄相同的前導錨。 目前,我的代碼在下面,視圖的前導錨點與導航欄的前導不同。 (是的,因為我正在使用 layoutMarginsGuide 所以這就是原因。)

NSLayoutConstraint.activate([
    myView.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor),
    myView.bottomAnchor.constraint(equalTo: self.safeAreaLayoutGuide.bottomAnchor),
    myView.leadingAnchor.constraint(equalTo: self.layoutMarginsGuide.leadingAnchor),
    myView.trailingAnchor.constraint(equalTo: self.layoutMarginsGuide.trailingAnchor),
    myView.centerXAnchor.constraint(equalTo: self.centerXAnchor)
])

我使用 Figma 並發現大型導航欄(對於 iPhoneSE)的填充為 16,因此我可以將 myView 的前導錨的約束設置為

myView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 16)

但我想知道是否有一種方法可以在不使用固定常數值 16 的情況下進行對齊? 我查看了 Safe Area Layout Guide 和 Layout Margins Guide ,但我無法根據需要更改視圖。

我遇到了兩種可能賦予此價值的方法:

1.遍歷導航欄層次結構

var leftMargin: CGFloat = 0.0

for view in navigationController!.navigationBar.subviews
{
    if let classToFind = NSClassFromString("_UINavigationBarLargeTitleView"),
       view.isKind(of: classToFind)
    {
        leftMargin = view.layoutMargins.left
    }
}

// Set your left margin of view to align to leftMargin variable

這里的兩個未知數是我不確定這是否正在查詢私有 class 以及是否可以。 第二件事是,這個 class 名稱可能會在未來的 iOS 版本中更改。

2.systemMinimumLayoutMargins

我遇到的另一件事是獲取systemminimumlayoutmargins ,您可以這樣做:

var leftMargin = navigationController!.systemMinimumLayoutMargins.leading

// Set your left margin of view to align to leftMargin variable

這給出了一個有效的值,但是我不確定這是否是描述標題左側值的預期用途

暫無
暫無

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

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