Skip to content

Commit

Permalink
Work/9.0.5 (#486)
Browse files Browse the repository at this point in the history
* Notifify will change before changes are made

* Account for bounceAnimationOffset with keyboard avoidance

* Release prep
  • Loading branch information
wtmoose committed Oct 5, 2021
1 parent c502648 commit 1e49de7
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 3 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# Change Log
All notable changes to this project will be documented in this file.

## 9.0.5

### Fixes

* #482 Fix timing of `KeyboardTrackingView` callbacks.
* #483 KeyboardTrackingView causes a small space under bottom-style view

## 9.0.4

* #471 Xcode 13 issue - Enum cases with associated values cannot be marked potentially unavailable with '@available'
Expand Down
2 changes: 1 addition & 1 deletion SwiftMessages.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |spec|
spec.name = 'SwiftMessages'
spec.version = '9.0.4'
spec.version = '9.0.5'
spec.license = { :type => 'MIT' }
spec.homepage = 'https://github.com/SwiftKickMobile/SwiftMessages'
spec.authors = { 'Timothy Moose' => '[email protected]' }
Expand Down
16 changes: 15 additions & 1 deletion SwiftMessages/KeyboardTrackingView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,18 @@ open class KeyboardTrackingView: UIView {
/// The margin to maintain between the keyboard and the top of the view.
@IBInspectable open var topMargin: CGFloat = 0

/// Subclasses can override this to do something before the change.
open func willChange(
change: KeyboardTrackingView.Change,
userInfo: [AnyHashable : Any]
) {}

/// Subclasses can override this to do something after the change.
open func didChange(
change: KeyboardTrackingView.Change,
userInfo: [AnyHashable : Any]
) {}

override public init(frame: CGRect) {
super.init(frame: frame)
postInit()
Expand Down Expand Up @@ -101,11 +113,12 @@ open class KeyboardTrackingView: UIView {
guard !(isPaused || isAutomaticallyPaused),
let userInfo = (notification as NSNotification).userInfo,
let value = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
willChange(change: change, userInfo: userInfo)
delegate?.keyboardTrackingViewWillChange(change: change, userInfo: userInfo)
let keyboardRect = value.cgRectValue
let thisRect = convert(bounds, to: nil)
let newHeight = max(0, thisRect.maxY - keyboardRect.minY) + topMargin
guard heightConstraint.constant != newHeight else { return }
delegate?.keyboardTrackingViewWillChange(change: change, userInfo: userInfo)
animateKeyboardChange(change: change, height: newHeight, userInfo: userInfo)
}

Expand All @@ -115,6 +128,7 @@ open class KeyboardTrackingView: UIView {
let curveNumber = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? NSNumber {
CATransaction.begin()
CATransaction.setCompletionBlock {
self.didChange(change: change, userInfo: userInfo)
self.delegate?.keyboardTrackingViewDidChange(change: change, userInfo: userInfo)
}
UIView.beginAnimations(nil, context: nil)
Expand Down
11 changes: 10 additions & 1 deletion SwiftMessages/MaskingView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,15 @@ class MaskingView: PassthroughView {
guard let keyboardTrackingView = keyboardTrackingView,
view != keyboardTrackingView,
view != backgroundView else { return }
keyboardTrackingView.topAnchor.constraint(greaterThanOrEqualTo: view.bottomAnchor).with(priority: UILayoutPriority(250)).isActive = true
let offset: CGFloat
if let adjustable = view as? MarginAdjustable {
offset = -adjustable.bounceAnimationOffset
} else {
offset = 0
}
keyboardTrackingView.topAnchor.constraint(
greaterThanOrEqualTo: view.bottomAnchor,
constant: offset
).with(priority: UILayoutPriority(250)).isActive = true
}
}

0 comments on commit 1e49de7

Please sign in to comment.