问题
我正在开发IOS应用程序。 我使用XLPagerTabStrip库来创建像Android一样的标签。 YouTube上。 一切正常,但我对标签有问题。
我有3个标签,但它们不会填满整个宽度,它们会重叠。
Paren-Class Code
import UIKit
import XLPagerTabStrip
class InformationsParentView: ButtonBarPagerTabStripViewController {
let purpleInspireColor = UIColor(red:0.13, green:0.03, blue:0.25, alpha:1.0)
override func viewDidLoad() {
super.viewDidLoad()
settings.style.buttonBarBackgroundColor = .white
settings.style.buttonBarItemBackgroundColor = .white
settings.style.selectedBarBackgroundColor = purpleInspireColor
settings.style.buttonBarItemLeftRightMargin = 0
settings.style.selectedBarHeight = 2
settings.style.buttonBarMinimumLineSpacing = 20
settings.style.buttonBarItemTitleColor = .black
settings.style.buttonBarItemLeftRightMargin = 0
settings.style.buttonBarItemsShouldFillAvailiableWidth = true
}
override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
let tabWorkers = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbWorkers")
let tabPLs = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbPLs")
let tabSuperiors = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbSuperiors")
return [tabWorkers, tabPLs, tabSuperiors]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
故事板
场景
场景
属性检查器
尺寸检验员
的相关信息
我找到了一个解决方案,但它对我不起作用(Github Issue 256):
除非我同时指定了settings.style.buttonBarItemsShouldFillAvailableWidth = true
,否则
settings.style.buttonBarItemLeftRightMargin = 0
不会为我填充可用的宽度。
有没有人可以解决这个问题?
我正在使用XCode版本9,Swift 3和IOS 11。
答案 0 :(得分:6)
在窗格中打开 ButtonBarPagerTabStripViewController.swift 文件。
在 ButtonBarPagerTabStripViewController 类定义中,删除 UICollectionViewDelegate 协议并实施 UICollectionViewDelegateFlowLayout 协议。
所以改变源代码
这
open class ButtonBarPagerTabStripViewController:
PagerTabStripViewController, PagerTabStripDataSource,
PagerTabStripIsProgressiveDelegate, UICollectionViewDelegate,
UICollectionViewDataSource {
...
}
到
open class ButtonBarPagerTabStripViewController:
PagerTabStripViewController, PagerTabStripDataSource,
PagerTabStripIsProgressiveDelegate, UICollectionViewDataSource,
UICollectionViewDelegateFlowLayout {
...
}
当我将我的应用程序从XCode 8.3.3迁移到XCode 9时,我遇到了这个问题。这是pod的问题。如果您使用XCode 8.3.3进行尝试,您将看到没有错误。如果要使用XCode 9,请执行上述方法。
答案 1 :(得分:1)
试试这个
buttonBarView.selectedBar.backgroundColor = #colorLiteral(red: 0.1353600621, green: 0.1353642344, blue: 0.1353619695, alpha: 1)
settings.style.buttonBarBackgroundColor = .white
settings.style.buttonBarItemBackgroundColor = .white
settings.style.selectedBarHeight = 2.0
settings.style.selectedBarBackgroundColor = purpleInspireColor
settings.style.buttonBarItemFont = .boldSystemFont(ofSize: 14)
settings.style.buttonBarItemTitleColor = .black
settings.style.buttonBarItemsShouldFillAvailiableWidth = false
super.viewDidLoad()
buttonBarItemsShouldFillAvailiableWidth = false
并确保super.viewDidload(
)是代码的结尾,因为我在更改指标信息时遇到了一些问题
答案 2 :(得分:1)
在调用 super.viewDidLoad()之前,您需要首先配置设置,然后然后尝试通过添加 view.layoutIfNeeded( ),如下所示:
override func viewDidLoad() {
//configure settings first
configurePagerTabStrip()
super.viewDidLoad()
//then
self.view.layoutIfNeeded()
}
func configurePagerTabStrip() {
settings.style.buttonBarBackgroundColor = .white
settings.style.buttonBarItemBackgroundColor = .white
settings.style.selectedBarBackgroundColor = purpleInspireColor
settings.style.buttonBarItemLeftRightMargin = 0
settings.style.selectedBarHeight = 2
settings.style.buttonBarMinimumLineSpacing = 20
settings.style.buttonBarItemTitleColor = .black
settings.style.buttonBarItemLeftRightMargin = 0
settings.style.buttonBarItemsShouldFillAvailiableWidth = true
}
答案 3 :(得分:1)
以上解决方案都不适合我,除了, jcarlos276 的回答。 https://stackoverflow.com/a/61784184/3549781
虽然它解决了这个问题,但还是有一些副作用,比如在我的情况下,其中一个子视图控制器有 UITableView 并且它发出警告,
<块引用>[TableView] 仅警告一次:UITableView 被告知要对其进行布局
不在视图层次结构中的可见单元格和其他内容
(表视图或其超视图之一尚未添加到
窗户)。这可能会通过强制表视图中的视图来导致错误
在没有准确信息的情况下加载和执行布局(例如表格视图
边界、特征集合、布局边距、安全区域插入等),以及
由于额外的布局也会造成不必要的性能开销
通过。在以下位置创建一个符号断点
UITableViewAlertForLayoutOutsideViewHierarchy 在
调试器并查看导致这种情况发生的原因,这样您就可以避免这种情况
如果可能的话,完全采取行动,或者推迟到表视图有
已添加到窗口。表视图:
这是由以下代码引起的,该代码要求视图立即在 func viewDidLoad()
view.setNeedsLayout()
view.layoutIfNeeded()
我想出的实际修复有点相似。我没有要求整个 view
自己进行布局,而是为 ButtonBarView
连接了一个插座并要求它进行布局,
buttonBarView.setNeedsLayout()
buttonBarView.layoutIfNeeded()
答案 4 :(得分:0)
试试这个,它在生产应用程序中使用,它适用于我
import UIKit
import XLPagerTabStrip
class EventsPagerViewController: ButtonBarPagerTabStripViewController {
/// MARK: - Data
var routingModel: RoutingModel?
// MARK: - Lifecycle
override func viewDidLoad() {
// change selected bar color
settings.style.buttonBarBackgroundColor = .white
settings.style.buttonBarItemBackgroundColor = .white
settings.style.selectedBarBackgroundColor = ColorManager.mainOrange
settings.style.buttonBarItemFont = .boldSystemFont(ofSize: 14)
settings.style.selectedBarHeight = 2.0
settings.style.buttonBarMinimumLineSpacing = 0
settings.style.buttonBarItemTitleColor = .black
settings.style.buttonBarItemsShouldFillAvailableWidth = true
settings.style.buttonBarLeftContentInset = 0
settings.style.buttonBarRightContentInset = 0
changeCurrentIndexProgressive = { (oldCell: ButtonBarViewCell?, newCell: ButtonBarViewCell?, progressPercentage: CGFloat, changeCurrentIndex: Bool, animated: Bool) -> Void in
guard changeCurrentIndex == true else { return }
oldCell?.label.textColor = .black
newCell?.label.textColor = ColorManager.mainOrange
}
containerView?.isScrollEnabled = true
super.viewDidLoad()
definesPresentationContext = true
setupNavSettings()
}
override public func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
let upcomingVC = EventsUpcomingItchesViewController()
upcomingVC.routingModel = routingModel
let pastVC = EventsPastItchesViewController()
// deinit data
routingModel = nil
return [upcomingVC, pastVC]
}
private func setupNavSettings() {
navigationItem.title = "My Events"
}
}