Commit 6050b9bc by Daniel Dahan

issue-742: fixed height of TabBar when setting layoutEdgeInsets

parent 98166c9a
...@@ -161,31 +161,9 @@ open class PageMenuController: UIViewController { ...@@ -161,31 +161,9 @@ open class PageMenuController: UIViewController {
have a certain need. have a certain need.
*/ */
open func layoutSubviews() { open func layoutSubviews() {
layoutTabBar()
layoutScrollView() layoutScrollView()
layoutViewControllers() layoutViewControllers()
let p = (tabBar?.intrinsicContentSize.height ?? 0) + (tabBar?.layoutEdgeInsets.top ?? 0) + (tabBar?.layoutEdgeInsets.bottom ?? 0)
let y = view.height - p
tabBar?.height = p
tabBar?.width = view.width + (tabBar?.layoutEdgeInsets.left ?? 0) + (tabBar?.layoutEdgeInsets.right ?? 0)
switch tabBarAlignment {
case .top:
tabBar?.isHidden = false
tabBar?.y = 0
scrollView.y = p
scrollView.height = y
case .bottom:
tabBar?.isHidden = false
tabBar?.y = y
scrollView.y = 0
scrollView.height = y
case .hidden:
tabBar?.isHidden = true
scrollView.y = 0
scrollView.height = view.height
}
} }
/** /**
...@@ -249,25 +227,19 @@ extension PageMenuController { ...@@ -249,25 +227,19 @@ extension PageMenuController {
- Parameter _ buttons: An Array of UIButtons. - Parameter _ buttons: An Array of UIButtons.
*/ */
fileprivate func prepareTabBarButtons(_ buttons: [UIButton]) { fileprivate func prepareTabBarButtons(_ buttons: [UIButton]) {
guard let tb = tabBar else { guard let v = tabBar else {
return return
} }
tb.buttons = buttons v.buttons = buttons
for v in tb.buttons { for b in v.buttons {
v.removeTarget(self, action: #selector(tb.handleButton(button:)), for: .touchUpInside) b.removeTarget(self, action: #selector(handleTabBarButton(button:)), for: .touchUpInside)
v.removeTarget(self, action: #selector(handleTabBarButton(button:)), for: .touchUpInside) b.addTarget(self, action: #selector(handleTabBarButton(button:)), for: .touchUpInside)
v.addTarget(self, action: #selector(handleTabBarButton(button:)), for: .touchUpInside)
} }
} }
fileprivate func prepareTabBar() { fileprivate func prepareTabBar() {
guard 0 < viewControllers.count else {
tabBar = nil
return
}
var buttons = [UIButton]() var buttons = [UIButton]()
for v in viewControllers { for v in viewControllers {
...@@ -276,6 +248,7 @@ extension PageMenuController { ...@@ -276,6 +248,7 @@ extension PageMenuController {
} }
guard 0 < buttons.count else { guard 0 < buttons.count else {
tabBar?.removeFromSuperview()
tabBar = nil tabBar = nil
return return
} }
...@@ -315,14 +288,32 @@ extension PageMenuController { ...@@ -315,14 +288,32 @@ extension PageMenuController {
extension PageMenuController { extension PageMenuController {
fileprivate func layoutScrollView() { fileprivate func layoutScrollView() {
scrollView.frame = view.bounds
scrollView.contentSize = CGSize(width: scrollView.width * CGFloat(viewControllers.count), height: scrollView.height) scrollView.contentSize = CGSize(width: scrollView.width * CGFloat(viewControllers.count), height: scrollView.height)
scrollView.contentOffset = CGPoint(x: scrollView.width * CGFloat(selectedIndex), y: 0) scrollView.contentOffset = CGPoint(x: scrollView.width * CGFloat(selectedIndex), y: 0)
guard let v = tabBar else {
scrollView.frame = view.bounds
return
}
let p = tabBar?.height ?? 0
let y = view.height - p
switch tabBarAlignment {
case .top:
scrollView.y = p
scrollView.height = y
case .bottom:
scrollView.y = 0
scrollView.height = y
case .hidden:
scrollView.y = 0
scrollView.height = view.height
}
} }
fileprivate func layoutViewControllers() { fileprivate func layoutViewControllers() {
let n = viewControllers.count let n = viewControllers.count
scrollView.contentSize = CGSize(width: scrollView.width * CGFloat(n), height: scrollView.height)
guard 1 < n else { guard 1 < n else {
layoutViewController(at: 0, position: 0) layoutViewController(at: 0, position: 0)
...@@ -355,6 +346,31 @@ extension PageMenuController { ...@@ -355,6 +346,31 @@ extension PageMenuController {
fileprivate func layoutViewController(at index: Int, position: Int) { fileprivate func layoutViewController(at index: Int, position: Int) {
viewControllers[index].view.frame = CGRect(x: CGFloat(position) * scrollView.width, y: 0, width: scrollView.width, height: scrollView.height) viewControllers[index].view.frame = CGRect(x: CGFloat(position) * scrollView.width, y: 0, width: scrollView.width, height: scrollView.height)
} }
/**
Layout the TabBar.
*/
fileprivate func layoutTabBar() {
guard let v = tabBar else {
return
}
let p = tabBar?.height ?? 0
let y = view.height - p
tabBar?.width = view.width
switch tabBarAlignment {
case .top:
tabBar?.isHidden = false
tabBar?.y = 0
case .bottom:
tabBar?.isHidden = false
tabBar?.y = y
case .hidden:
tabBar?.isHidden = true
}
}
} }
extension PageMenuController { extension PageMenuController {
...@@ -422,11 +438,11 @@ extension PageMenuController { ...@@ -422,11 +438,11 @@ extension PageMenuController {
*/ */
@objc @objc
fileprivate func handleTabBarButton(button: UIButton) { fileprivate func handleTabBarButton(button: UIButton) {
guard let tb = tabBar else { guard let v = tabBar else {
return return
} }
guard let i = tb.buttons.index(of: button) else { guard let i = v.buttons.index(of: button) else {
return return
} }
...@@ -435,10 +451,11 @@ extension PageMenuController { ...@@ -435,10 +451,11 @@ extension PageMenuController {
} }
selectedIndex = i selectedIndex = i
v.select(at: i)
removeViewControllers() removeViewControllers()
prepareViewControllers() prepareViewControllers()
layoutViewControllers() layoutSubviews()
} }
} }
...@@ -452,6 +469,6 @@ extension PageMenuController: UIScrollViewDelegate { ...@@ -452,6 +469,6 @@ extension PageMenuController: UIScrollViewDelegate {
removeViewControllers() removeViewControllers()
prepareViewControllers() prepareViewControllers()
layoutViewControllers() layoutSubviews()
} }
} }
...@@ -244,7 +244,6 @@ open class PageTabBarController: RootController { ...@@ -244,7 +244,6 @@ open class PageTabBarController: RootController {
for x in viewControllers { for x in viewControllers {
let button = x.pageTabBarItem as UIButton let button = x.pageTabBarItem as UIButton
pageTabBar.buttons.append(button) pageTabBar.buttons.append(button)
button.removeTarget(self, action: #selector(pageTabBar.handleButton(button:)), for: .touchUpInside)
button.removeTarget(self, action: #selector(handlePageTabBarButton(button:)), for: .touchUpInside) button.removeTarget(self, action: #selector(handlePageTabBarButton(button:)), for: .touchUpInside)
button.addTarget(self, action: #selector(handlePageTabBarButton(button:)), for: .touchUpInside) button.addTarget(self, action: #selector(handlePageTabBarButton(button:)), for: .touchUpInside)
} }
......
...@@ -65,7 +65,7 @@ public enum TabBarStyle: Int { ...@@ -65,7 +65,7 @@ public enum TabBarStyle: Int {
open class TabBar: Bar { open class TabBar: Bar {
/// A boolean indicating if the TabBar line is in an animation state. /// A boolean indicating if the TabBar line is in an animation state.
open internal(set) var isAnimating = false open fileprivate(set) var isAnimating = false
/// Enables and disables bouncing when swiping. /// Enables and disables bouncing when swiping.
open var isBounceEnabled: Bool { open var isBounceEnabled: Bool {
...@@ -88,7 +88,7 @@ open class TabBar: Bar { ...@@ -88,7 +88,7 @@ open class TabBar: Bar {
open weak var delegate: TabBarDelegate? open weak var delegate: TabBarDelegate?
/// The currently selected button. /// The currently selected button.
open internal(set) var selected: UIButton? open fileprivate(set) var selected: UIButton?
/// A preset wrapper around contentEdgeInsets. /// A preset wrapper around contentEdgeInsets.
open override var contentEdgeInsetsPreset: EdgeInsetsPreset { open override var contentEdgeInsetsPreset: EdgeInsetsPreset {
...@@ -218,7 +218,7 @@ open class TabBar: Bar { ...@@ -218,7 +218,7 @@ open class TabBar: Bar {
b.x = w b.x = w
w += width w += width
} }
print(w, contentView.width)
if w > contentView.width { if w > contentView.width {
contentView.contentSize.width = w contentView.contentSize.width = w
} }
...@@ -271,7 +271,7 @@ extension TabBar { ...@@ -271,7 +271,7 @@ extension TabBar {
*/ */
fileprivate func prepareLineAnimationHandler(button: UIButton) { fileprivate func prepareLineAnimationHandler(button: UIButton) {
removeLineAnimationHandler(button: button) removeLineAnimationHandler(button: button)
button.addTarget(self, action: #selector(handleButton(button:)), for: .touchUpInside) button.addTarget(self, action: #selector(handleLineAnimation(button:)), for: .touchUpInside)
} }
/** /**
...@@ -279,14 +279,14 @@ extension TabBar { ...@@ -279,14 +279,14 @@ extension TabBar {
- Parameter button: A UIButton. - Parameter button: A UIButton.
*/ */
fileprivate func removeLineAnimationHandler(button: UIButton) { fileprivate func removeLineAnimationHandler(button: UIButton) {
button.removeTarget(self, action: #selector(handleButton(button:)), for: .touchUpInside) button.removeTarget(self, action: #selector(handleLineAnimation(button:)), for: .touchUpInside)
} }
} }
extension TabBar { extension TabBar {
/// Handles the button touch event. /// Handles the button touch event.
@objc @objc
internal func handleButton(button: UIButton) { fileprivate func handleLineAnimation(button: UIButton) {
animate(to: button, isTriggeredByUserInteraction: true) animate(to: button, isTriggeredByUserInteraction: true)
} }
} }
......
...@@ -552,7 +552,6 @@ extension TextField { ...@@ -552,7 +552,6 @@ extension TextField {
leftViewEditingBeginAnimation() leftViewEditingBeginAnimation()
placeholderEditingDidBeginAnimation() placeholderEditingDidBeginAnimation()
dividerEditingDidBeginAnimation() dividerEditingDidBeginAnimation()
} }
// Live updates the textField text. // Live updates the textField text.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment