问题
I'm using XLPagerTabStrip in a swift 3 application, I use the default ButtonBar and everything works fine but the bar is hidden when I have a navigation bar enabled like this:
If I hide the navigation bar, it shows like this:
How do I get it below the navigation bar not behind it, because I need the navigation bar right there?
import UIKit
import XLPagerTabStrip
class DesignersController: ButtonBarPagerTabStripViewController {
override func viewDidLoad() {
buttonBarView.backgroundColor = .white
settings.style.buttonBarBackgroundColor = .white
settings.style.selectedBarBackgroundColor = UIColor(netHex: 0x4a4a4a)
settings.style.selectedBarHeight = 1
settings.style.buttonBarItemBackgroundColor = .white
settings.style.buttonBarItemTitleColor = UIColor(netHex: 0x8c8c8c)
super.viewDidLoad()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
//self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
var isReload = false
override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
let child_1 = ChildExampleViewController(itemInfo: "Top")
let child_2 = ChildExampleViewController(itemInfo: "Men")
let child_3 = ChildExampleViewController(itemInfo: "Women")
guard isReload else {
return [child_1, child_2, child_3]
}
var childViewControllers = [child_1, child_2, child_3]
for (index, _) in childViewControllers.enumerated(){
let nElements = childViewControllers.count - index
let n = (Int(arc4random()) % nElements) + index
if n != index{
swap(&childViewControllers[index], &childViewControllers[n])
}
}
let nItems = 1 + (arc4random() % 8)
return Array(childViewControllers.prefix(Int(nItems)))
}
override func reloadPagerTabStripView() {
isReload = true
if arc4random() % 2 == 0 {
pagerBehaviour = .progressive(skipIntermediateViewControllers: arc4random() % 2 == 0, elasticIndicatorLimit: arc4random() % 2 == 0 )
}
else {
pagerBehaviour = .common(skipIntermediateViewControllers: arc4random() % 2 == 0)
}
super.reloadPagerTabStripView()
}
}
import Foundation
import XLPagerTabStrip
class ChildExampleViewController: UIViewController, IndicatorInfoProvider {
var itemInfo: IndicatorInfo = "View"
init(itemInfo: IndicatorInfo) {
self.itemInfo = itemInfo
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "XLPagerTabStrip"
view.addSubview(label)
view.backgroundColor = .red
view.addConstraint(NSLayoutConstraint(item: label, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: label, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1, constant: -50))
}
// MARK: - IndicatorInfoProvider
func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
return itemInfo
}
}
Thanks in advance.
回答1:
I just faced the same problem. Just add a CollectionView to VC in Interface Builder, and set its class to "ButtonBarView".Here Then connect its outlet with view in left panel.Like this Thats all, now buttonBar should be under NavigationBar.
回答2:
self.edgesForExtendedLayout = []
I used nib to create PagerViewController and wrote the above code within viewDidLoad()
回答3:
This helped me and works for iPhone X:
self.navigationController!.navigationBar.isTranslucent = false
来源:https://stackoverflow.com/questions/40020666/xlpagertabstrip-buttonbar-sticks-behind-navigation-bar