remove height animation, ensure growing text area has content in proper

place.

// FREEBIE
pull/1/head
Michael Kirk 8 years ago committed by sdkjfhsdkjhfsdlkjhfsdf
parent 562e706ec9
commit 96906440a7

@ -230,21 +230,37 @@ public class AttachmentApprovalViewController: OWSViewController, UITextViewDele
// let toolbar: UIToolbar // let toolbar: UIToolbar
// let sendButton: UIButton // let sendButton: UIButton
let textView: UITextView let textView: UITextView
let kToolbarMargin: CGFloat = 4
// private(set) var textViewHeightConstraint: NSLayoutConstraint!
private(set) var heightConstraint: NSLayoutConstraint!
private(set) var textViewHeightConstraint: NSLayoutConstraint! private var kMinTextViewHeight: CGFloat {
// return UIFont.ows_dynamicTypeBody().lineHeight
return 38
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private static var kMinTextViewHeight: CGFloat { class MessageTextView: UITextView {
return UIFont.ows_dynamicTypeBody().lineHeight + 4 // When creating new lines, contentOffset is animated, but because because
// we are simultaneously resizing the text view, this can cause the
// text in the textview to be "too high" in the text view.
// Solution is to disable animation for setting content offset.
override func setContentOffset(_ contentOffset: CGPoint, animated: Bool) {
super.setContentOffset(contentOffset, animated: false)
}
} }
init() { init() {
let textView = UITextView() let textView = MessageTextView()
self.textViewHeightConstraint = textView.autoSetDimension(.height, toSize: MessagingToolbar.kMinTextViewHeight) // self.textViewHeightConstraint = textView.autoSetDimension(.height, toSize: MessagingToolbar.kMinTextViewHeight)
self.textView = textView self.textView = textView
super.init(frame: CGRect.zero) super.init(frame: CGRect.zero)
let kToolbarMargin: CGFloat = 4
let kSendButtonWidth: CGFloat = 80 let kSendButtonWidth: CGFloat = 80
let kMinToolbarHeight: CGFloat = 40 let kMinToolbarHeight: CGFloat = 40
@ -273,7 +289,9 @@ public class AttachmentApprovalViewController: OWSViewController, UITextViewDele
self.items = [textViewItem, sendButton] self.items = [textViewItem, sendButton]
// toolbar doesn't render without some minimum height set. // toolbar doesn't render without some minimum height set.
self.autoSetDimension(.height, toSize: kMinToolbarHeight, relation: .greaterThanOrEqual) self.heightConstraint = self.autoSetDimension(.height,
toSize: kMinTextViewHeight + kToolbarMargin * 2,
relation: .greaterThanOrEqual)
// Adding textView to a toolbar item inserts it into a "hostView" // Adding textView to a toolbar item inserts it into a "hostView"
// This isn't really documentd, but I've verified it works on iOS10 // This isn't really documentd, but I've verified it works on iOS10
@ -296,21 +314,25 @@ public class AttachmentApprovalViewController: OWSViewController, UITextViewDele
let fixedWidth = textView.frame.size.width let fixedWidth = textView.frame.size.width
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude)) let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
let newHeight = Clamp(newSize.height, MessagingToolbar.kMinTextViewHeight, kMaxTextViewHeight) let newToolbarHeight = Clamp(newSize.height, kMinTextViewHeight, kMaxTextViewHeight)
if newHeight != self.textViewHeightConstraint.constant {
Logger.debug("\(self.logTag) oldHeight: \(self.textViewHeightConstraint.constant), newHeight: \(newHeight)") let newHeight = newToolbarHeight + kToolbarMargin * 2
self.textViewHeightConstraint.constant = max(MessagingToolbar.kMinTextViewHeight, newHeight) if newHeight != self.heightConstraint.constant {
UIView.animate(withDuration: 0.1) { Logger.debug("\(self.logTag) oldHeight: \(self.heightConstraint.constant), newHeight: \(newHeight)")
self.heightConstraint.constant = newHeight
// UIView.animate(withDuration: 0.1) {
self.setNeedsLayout() self.setNeedsLayout()
self.layoutIfNeeded() self.layoutIfNeeded()
} // }
} else { } else {
Logger.debug("\(self.logTag) height unchanged: \(self.textViewHeightConstraint.constant)") Logger.debug("\(self.logTag) height unchanged: \(self.heightConstraint.constant)")
} }
} }
// override func layoutSubviews() { override func layoutSubviews() {
// super.layoutSubviews() Logger.info("\(self.logTag) in \(#function)")
super.layoutSubviews()
// //
// let kMargin = 4 // let kMargin = 4
// let kTextViewHeight = 40 // let kTextViewHeight = 40
@ -330,10 +352,6 @@ public class AttachmentApprovalViewController: OWSViewController, UITextViewDele
//// let fittedFrame = CGRect(x: frame.origin.x, y: frame.origin.y, width: frame.size.width, height: maxHeight) //// let fittedFrame = CGRect(x: frame.origin.x, y: frame.origin.y, width: frame.size.width, height: maxHeight)
//// self.frame = fittedFrame //// self.frame = fittedFrame
//// self.bounds = fittedFrame //// self.bounds = fittedFrame
// }
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} }
} }

Loading…
Cancel
Save