From 0087ad64c9f5dfc287ad6163306667ad92bf8837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20=C5=BDigis?= Date: Thu, 10 Feb 2022 13:30:17 +0200 Subject: [PATCH] Fixes placeholder bug when it could go outside field bounds (#11) --- .gitignore | 3 ++- Sources/CocoaTextField/CocoaTextField.swift | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 496ee2c..e3b7c1b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.DS_Store \ No newline at end of file +.DS_Store +xcuserdata \ No newline at end of file diff --git a/Sources/CocoaTextField/CocoaTextField.swift b/Sources/CocoaTextField/CocoaTextField.swift index 4d64ec7..fc2257b 100644 --- a/Sources/CocoaTextField/CocoaTextField.swift +++ b/Sources/CocoaTextField/CocoaTextField.swift @@ -88,6 +88,7 @@ public class CocoaTextField: UITextField { private let padding: CGFloat = 16 private let hintFont = UIFont.systemFont(ofSize: 12) + private var initialBoundsWereCalculated = false // MARK: Public @@ -120,7 +121,6 @@ public class CocoaTextField: UITextField { spellCheckingType = .no layer.borderWidth = borderWidth layer.cornerRadius = cornerRadius - hintLabel.frame = CGRect(origin: CGPoint.zero, size: CGSize(width: frame.width, height: frame.height)) addSubview(hintLabel) } @@ -134,12 +134,12 @@ public class CocoaTextField: UITextField { if isHintVisible { // Small placeholder self.hintLabel.alpha = 1 - self.hintLabel.transform = CGAffineTransform.identity.translatedBy(x: self.padding, y: -self.hintHeight()) + self.hintLabel.transform = CGAffineTransform.identity.translatedBy(x: 0, y: -self.hintHeight()) self.hintLabel.font = self.hintFont } else if self.text?.isEmpty ?? true { // Large placeholder self.hintLabel.alpha = 1 - self.hintLabel.transform = CGAffineTransform.identity.translatedBy(x: self.padding, y: 0) + self.hintLabel.transform = CGAffineTransform.identity.translatedBy(x: 0, y: 0) self.hintLabel.font = self.font } else { // No placeholder @@ -248,6 +248,17 @@ public class CocoaTextField: UITextField { return CGSize(width: bounds.size.width, height: 64) } + override open func layoutSubviews() { + super.layoutSubviews() + if !initialBoundsWereCalculated { + hintLabel.frame = CGRect( + origin: CGPoint(x: self.padding, y: 0), + size: CGSize(width: frame.width - self.padding * 3, height: frame.height) + ) + initialBoundsWereCalculated = true + } + } + // MARK: Init override init(frame: CGRect) {