swiftのTabPageViewControllerの上部タブの高さをTableView上下スクロール時に変更したいです。
TabPageViewController公式ページ
https://github.com/EndouMari/TabPageViewController
TabPageViewControllerの
初期表示時に高さを変更して表示することはできました。
①のところを22に書き換えると初回表示時に高さが変更されて
表示されます。ただ、一旦表示した後、独自メソッドから後で変更しようとすると
22のまま固定されてしまいます。
⬇️TabPageViewControllerを継承したカスタムクラス
swift
1 class CustomTabPageViewController: TabPageViewController { 2 override func viewDidLoad() { 3 super.viewDidLoad() 4 option.tabHeight = 32.0 // ① 5 } 6 func didReceiveMemoryWarning() { 7 super.didReceiveMemoryWarning() 8 } 9 func setTabHeight(height: CGFloat) { 10 option.tabHeight = height 11 print("height=" + String(option.tabHeight)) 12 // ここまで22と32が切り替わることを確認できました。 13 } 14 }
⬇️tcを管理するクラス
swift
1 var tc: CustomTabPageViewController = CustomTabPageViewController() 2 〜略〜 3 tc.option.tabHeight = 20 // 初期32 4 5 // 上下スクロール時に呼ばれる独自メソッド 6 func setBarHidden(hidden: Bool) { 7 if (_setBarHidden == hidden) { 8 return 9 } 10 if (hidden) { 11 tc.setTabHeight(22.0) 12 } else { 13 tc.setTabHeight(32.0) 14 } 15 } 16 }
また、切り替わることができたとコード内に記述したとおり
上下スクロール時に独自関数が呼ばれ
option.tabHeightが22と32で切り替わることを確認しました。
ライブラリの方を覗いたところ
TabPageViewController.swift
のタブ表示メソッドをみつけました。(option.tabHeightの部分)
swift
1 private func configuredTabView() -> TabView { 2 let tabView = TabView(isInfinity: isInfinity, option: option) 3 tabView.translatesAutoresizingMaskIntoConstraints = false 4 5 let height = NSLayoutConstraint(item: tabView, 6 attribute: .Height, 7 relatedBy: .Equal, 8 toItem: nil, 9 attribute: .Height, 10 multiplier: 1.0, 11 constant: option.tabHeight) 12 tabView.addConstraint(height) 13 view.addSubview(tabView)
しかし、configuredTabView()を読んでいるのは以下描画メソッドでtabView.superviewがnilのときだけ処理するような記述がありました。(これが初回にしか反映されない理由かなと思います。)
swift
1 override public func viewWillAppear(animated: Bool) { 2 super.viewWillAppear(animated) 3 4 if tabView.superview == nil { 5 tabView = configuredTabView() 6 } 7
しかし、tabViewを初期化するようなメソッドが見当たらず
tabViewも以下のようにprivateで宣言されており、上書きも許さないようになってました。
swift
1 lazy private var tabView: TabView = self.configuredTabView()
1,
あまりしないほうがいいかもしれませんが
privateを突破する裏技的な方法でTabViewを更新するとか
(phpだとrefrectionとかいうので突破できたりするので・・)
2,
そもそも別のやり方で高さを変更できるとか。
3,
ライブラリ更新が面倒になるのであまりやりたくありませんが、
ライブラリのunlockをはずしてライブラリを更新するとか。(流儀に反する?)
ありますでしょうか?
複数あればiPhone開発者として、
こうあるべきも含めて教えて欲しいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/15 02:12