也许没有办法。我很确定有一种方法可以自定义uitabbarcontroller布局工作。 我的问题是关于在uitabbarcontroller中拥有一个标题和身体。我在tabbarlayout中有以下代码。
tabbarlayout.swift
import UIKit
class TabBarLayout: UITabBarController {
@IBOutlet var viewHeader: UIView!
override func viewDidLoad() {
super.viewDidLoad()
viewHeader.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(viewHeader)
let leftSide = NSLayoutConstraint(item: viewHeader!, attribute: .left, relatedBy: .equal, toItem: view, attribute: .left, multiplier: 1.0, constant: 0.0)
let rightSide = NSLayoutConstraint(item: viewHeader!, attribute: .right, relatedBy: .equal, toItem: view, attribute: .right, multiplier: 1.0, constant: 0.0)
let topSide = NSLayoutConstraint(item: viewHeader!, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1.0, constant: 0.0)
let height = NSLayoutConstraint(item: viewHeader!, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 100)
view.addConstraint(leftSide)
view.addConstraint(rightSide)
view.addConstraint(topSide)
view.addConstraint(height)
}
}
buy.storyboard
购买故事板显示以下屏幕截图:
BUYCONTROLLER.SWIFT
import UIKit
class BuyController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("BUYCONTROLLER")
let tbc = tabBarController as! TabBarLayout
// How do I align this view's topAnchor to viewHeader's bottom anchor?
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let tbc = tabBarController as! TabBarLayout
let headerHeight = tbc.viewHeader.frame.height
self.additionalSafeAreaInsets.top = headerHeight
}
该方法基于ViewHeader的高度,动态设置了AffearalSafeareAinsets.top。因此,购买Controller的内容从ViewHeader下方开始,防止重叠。