Swift:更改 UINavigationController 视图的高度

Posted

技术标签:

【中文标题】Swift:更改 UINavigationController 视图的高度【英文标题】:Swift: Change height of UINavigationController view 【发布时间】:2020-06-22 14:42:15 【问题描述】:

我在 UINavigationController 中嵌入了一个 UITableView。 UITableView 设置如下:

import UIKit


class HistoryTableViewController: UITableViewController 

let cellID = "HistoryColumns"

struct CellData 
    let date: String?
    let number: String?
    let before: String?
    let after: String?
    let diff: String?
    let strength: String?
    let location: String?


var data = [CellData]()

override func viewDidLoad() 
    super.viewDidLoad()
    
    data = [
        // data goes here
    ]
    tableView.register(HistoryTableViewCell.self, forCellReuseIdentifier: cellID)


    self.navigationController?.navigationBar.topItem?.title = "Recent Activity"



// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int 
    return 1


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    
    return data.count


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: cellID) as! HistoryTableViewCell
    if indexPath.row % 2 == 0 
        cell.backgroundColor = UIColor.orange.withAlphaComponent(0.3)
    
    
    cell.date.valueLabel.text = data[indexPath.row].date
    cell.number.valueLabel.text = data[indexPath.row].flightNumber
    cell.before.valueLabel.text = data[indexPath.row].preFuel
    cell.after.valueLabel.text = data[indexPath.row].postFuel
    cell.diff.valueLabel.text = data[indexPath.row].uplift
    cell.strength.valueLabel.text = data[indexPath.row].density
    cell.location.valueLabel.text = data[indexPath.row].location
    
    return cell


我在 UINavigationController 中调用控制器如下:

    @objc func handleTap(_ sender: UITapGestureRecognizer? = nil) 
    DispatchQueue.asyncMain 
        let history = HistoryTableViewController()
        let navigationController = UINavigationController(rootViewController: history)
    
        self.present(navigationController, animated: true, completion: nil)
        
    

我要做的是在这里定义navigationController的视图高度(大约500)。我试过使用 navigationController.view.heightAnchor.constraint 但没有效果(显然我先将 translatesAutoresizingMaskIntoConstraints 设置为 false)...

我确实想在这里使用 UINavigationController,因为我需要它附带的导航栏。任何建议都非常感谢...

【问题讨论】:

这能回答你的问题吗? How to increase the height of navigation bar in Xcode? 抱歉,这是实际视图本身。我不希望它占据整个屏幕 - 更像是一个弹出窗口 【参考方案1】:

当你说.present 时,呈现的视图控制器占据屏幕的方式取决于你。进行自定义转换并为您自己的 UIPresentationController 子类提供frameOfPresentedViewInContainerView 的实现,以说明呈现的视图控制器的视图应该去哪里。

这也是一个带有自定义动画的愚蠢示例,但如果您不想自定义动画,则不必自定义。重要的是,我已经使呈现的视图控制器比正常情况下要小。

【讨论】:

以上是关于Swift:更改 UINavigationController 视图的高度的主要内容,如果未能解决你的问题,请参考以下文章

Swift:动态更改 TableViewCell 高度和动态更改 WebView 高度

iOS - 通过 Swift 更改约束乘数 [重复]

Swift - 为啥我在选择时无法更改色调?

Swift / CloudKit:记录更改后,上传触发“服务记录已更改”

使用 swift 语言更改按钮背景颜色

以编程方式更改键盘输入类型(Swift)