簡體   English   中英

如何刪除 UIBarButtonItem 左側的填充?

[英]how to remove padding left UIBarButtonItem?

我想在 UINavigationController 中使用自定義視圖作為 UIBarButtonItem,是否可以在此處刪除左填充?

我已經嘗試過:

let  btn = UIButton()
btn.frame = CGRect(x: -50, y: -50, width: 44, height: 50)
btn.setImage(UIImage(name:"img").withRenderingMode(.alwaysTemplate), for: .normal)
btn.addTarget(self, action: #selector(openSetting), for: .touchUpInside)

let leftButtonBar = UIBarButtonItem(customView: btn)

self.navigationItem.leftBarButtonItems = ( [leftButtonBar , otherBtn ])

在此處輸入圖片說明

如何刪除剩余空間設置圖標

更新 累了這段代碼:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 
view.backgroundColor = .gray
let  btn = UIButton()
btn.frame = CGRect(x: -15, y: 0, width: 44, height: 50)
btn.setImage(UIImage(name:"img").withRenderingMode(.alwaysTemplate), for: .normal)
btn.addTarget(self, action: #selector(DashboardTabBarController.openSetting), for: .touchUpInside)
view.addSubview(btn)
let leftButtonBar = UIBarButtonItem(customView: view)

在此處輸入圖片說明

單擊 btn 設置用戶和其他問題標題導航未居中對齊時出現此用戶問題

您應該已經注意到,無論您提供給自定義視圖的x值,即btn ,它都會始終從相同的位置開始,因為內部導航欄不計入為該項目提供的位置,並且它始終將內部定義的位置設置為下圖,我將背景顏色設置為自定義按鈕以獲得更好的視覺效果。

在此處輸入圖片說明

所以,這里的技巧是將您的自定義按鈕放入另一個容器視圖中,如下所示,

let view = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 200, height: 50)))
view.backgroundColor = .green
let  btn = UIButton(frame: CGRect(x: -10, y: 10 , width: 30, height: 30))
btn.setImage(UIImage(named: "cancelled")?.withRenderingMode(.alwaysTemplate), for: .normal)
btn.addTarget(self, action: #selector(openSetting), for: .touchUpInside)
btn.backgroundColor = .yellow
btn.tintColor = .red
view.addSubview(btn)

let  btn2 = UIButton(frame: CGRect(x: 20, y: 10, width: 30, height: 30))
btn2.setImage(UIImage(named: "cancelled")?.withRenderingMode(.alwaysTemplate), for: .normal)
btn2.contentMode = .scaleAspectFit
btn2.tintColor = .yellow
btn2.addTarget(self, action: #selector(openSetting), for: .touchUpInside)
view.addSubview(btn2)

let itemsContainer = UIBarButtonItem(customView: view)
self.navigationItem.leftBarButtonItems = [itemsContainer]

這將導致這個,

在此處輸入圖片說明

現在,如果您更改btnxywidthheight ,它將相應調整。

請試試這個。 這對我來說可以。 如果這段代碼不能正常工作,那么我會給你另一個解決方案。

   let view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
    let  btn = UIButton()
    btn.frame = CGRect(x: -15, y: 0, width: 44, height: 50)
    btn.setImage(UIImage(name:"img").withRenderingMode(.alwaysTemplate), for: .normal)
    btn.addTarget(self, action: #selector(openSetting), for: .touchUpInside)
    view.addSubview(btn)
    let leftButtonBar = UIBarButtonItem(customView: view)
    self.navigationItem.leftBarButtonItems = ( [leftButtonBar])

請在視圖中添加其他按鈕並相應地設置視圖的寬度。它可能對您有幫助。謝謝

將 cRect 的 x 值設置為零:

btn.frame = CGRect(x: 0, y: -50, width: 44, height: 50)

您可以設置imageInsets並設置圖像這是左邊距的示例,用於在默認后退按鈕的位置設置后退圖像

 let rightBtn = UIBarButtonItem(image: UIImage(named: "BackArrow"), style: .done, target: self, action: #selector(actnClose))
 rightBtn.imageInsets = UIEdgeInsets(top: 0, left: -12, bottom: 0, right: 0)
    
 self.navigationItem.setLeftBarButton(rightBtn, animated: true)

不那么痛苦且實際上最干凈的解決方案是隱藏左按鈕,然后直接向導航欄添加一個子視圖,並使用舊約束自定義它的位置和大小。 像魅力一樣工作。 尚未在所有情況下對其進行測試,但似乎工作正常。

暫無
暫無

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

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