की ऊंचाई बढ़ाएं, मैं लगभग पूरी तरह से कुंजीपटल के ऊपर एक UITextView को स्थानांतरित कर रहा हूं, पाठ की मात्रा के आधार पर इसकी ऊंचाई बढ़ा रहा/घटा रहा हूं और फिर इसे अपनी मूल स्थिति में वापस कर रहा हूं। हालांकि, मुझे UITextView के साथ माता-पिता UIView को बढ़ने में परेशानी हो रही है।आईओएस स्विफ्ट - गतिशील रूप से UITextView और पैरेंट UIView
अगर मैं अपने अद्यतन आकार करने के लिए माता-पिता UIView अद्यतन करने के लिए विधि updateParentView() की अंतिम पंक्ति uncomment, कुछ भी आकार बदलता है, UITextView भी शामिल है।
class ViewController: UIViewController, UITextViewDelegate {
var kPreferredTextViewToKeyboardOffset: CGFloat = 0.0
var keyboardFrame: CGRect = CGRect.nullRect
var keyboardIsShowing: Bool = false
@IBOutlet weak var commentView: UIView!
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var sendButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)
// Make it look like UITextField
self.textView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0)
self.textView.sizeToFit()
let lightestGrayColor: UIColor = UIColor(red: 224.0/255.0, green: 224.0/255.0, blue:224.0/255.0, alpha: 1.0)
self.textView.layer.borderColor = lightestGrayColor.CGColor
self.textView.layer.borderWidth = 0.6
self.textView.layer.cornerRadius = 6.0
self.textView.clipsToBounds = true
self.textView.layer.masksToBounds = true
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
NSNotificationCenter.defaultCenter().removeObserver(self)
}
func keyboardWillShow(notification: NSNotification)
{
self.keyboardIsShowing = true
if let info = notification.userInfo {
self.keyboardFrame = (info[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue()
self.arrangeViewOffsetFromKeyboard()
}
}
func keyboardWillHide(notification: NSNotification)
{
self.keyboardIsShowing = false
self.returnViewToInitialFrame()
}
func arrangeViewOffsetFromKeyboard()
{
var theApp: UIApplication = UIApplication.sharedApplication()
var windowView: UIView? = theApp.delegate!.window!
var textFieldLowerPoint: CGPoint = CGPointMake(self.commentView!.frame.origin.x, self.commentView!.frame.origin.y + self.commentView!.frame.size.height)
var convertedTextViewLowerPoint: CGPoint = self.view.convertPoint(textFieldLowerPoint, toView: windowView)
var targetTextViewLowerPoint: CGPoint = CGPointMake(self.commentView!.frame.origin.x, self.keyboardFrame.origin.y - kPreferredTextViewToKeyboardOffset)
var targetPointOffset: CGFloat = targetTextViewLowerPoint.y - convertedTextViewLowerPoint.y
var adjustedViewFrameCenter: CGPoint = CGPointMake(self.view.center.x, self.view.center.y + targetPointOffset)
UIView.animateWithDuration(0.2, animations: {
self.view.center = adjustedViewFrameCenter
})
}
func returnViewToInitialFrame()
{
var initialViewRect: CGRect = CGRectMake(0.0, 0.0, self.view.frame.size.width, self.view.frame.size.height)
if (!CGRectEqualToRect(initialViewRect, self.view.frame))
{
UIView.animateWithDuration(0.2, animations: {
self.view.frame = initialViewRect
});
}
}
func textViewDidBeginEditing(textView: UITextView) {
//
print("text view did begin editing\n")
//
if(self.keyboardIsShowing)
{
self.arrangeViewOffsetFromKeyboard()
}
}
func textViewDidChange(textView: UITextView) {
print("text view did change\n")
let textViewFixedWidth: CGFloat = self.textView.frame.size.width
let newSize: CGSize = self.textView.sizeThatFits(CGSizeMake(textViewFixedWidth, CGFloat(MAXFLOAT)))
var newFrame: CGRect = self.textView.frame
//
var textViewYPosition = self.textView.frame.origin.y
var heightDifference = self.textView.frame.height - newSize.height
//
if (abs(heightDifference) > 5) {
newFrame.size = CGSizeMake(fmax(newSize.width, textViewFixedWidth), newSize.height)
newFrame.offset(dx: 0.0, dy: heightDifference)
//
updateParentView(heightDifference: heightDifference)
}
self.textView.frame = newFrame
}
func updateParentView(#heightDifference: CGFloat) {
//
var newContainerViewFrame: CGRect = self.commentView.frame
//
var containerViewHeight = self.commentView.frame.size.height
print("container view height: \(containerViewHeight)\n")
//
var newContainerViewHeight = containerViewHeight - heightDifference
print("new container view height: \(newContainerViewHeight)\n")
//
var containerViewHeightDifference = containerViewHeight - newContainerViewHeight
print("container view height difference: \(containerViewHeightDifference)\n")
//
newContainerViewFrame.size = CGSizeMake(self.commentView.frame.size.width, newContainerViewHeight)
//
newContainerViewFrame.offset(dx: 0.0, dy: containerViewHeightDifference)
//
// self.commentView.frame = newContainerViewFrame
}
func textViewDidEndEditing(textView: UITextView) {
//
print("text view did end editing\n")
//
textView.resignFirstResponder()
}
}
मैं उलझन में हूं। क्या 'newContainterViewHeight'' '' के बजाय 'कंटेनर व्यूइट + ऊंचाई डिफरेंस' होना चाहिए? – skyline75489