コーナー半径とプレースホルダーの色と別のプロパティを制御するカスタムコードを持つUITextFieldがあります。また、任意のUI要素から影を落とすための拡張機能付きプロトコルがあります。UITextFieldのコーナー半径を大きくすると影が削除されます
問題は次のとおりです。テキストフィールドのコーナーの半径を大きくすると、影が失われます。角の半径が0である限り、私はまだ影があります。
そして、私はcornerRadiusを増やすと影を失ったときに、これは、デバッガで示しています。私は、影を落とすために実装ここ
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key height
は私のプロトコルである:
import UIKit
protocol DropShadow {}
extension DropShadow where Self: UIView {
func addDropShadow() {
layer.shadowColor = UIColor.black.cgColor
layer.shadowOpacity = 0.7
layer.shadowOffset = CGSize(width: 0, height: 4)
layer.shadowRadius = 3
}
}
そして、ここでは私のカスタムクラスでありますUITextFieldの場合:
import UIKit
@IBDesignable
class FancyTextField: UITextField, DropShadow {
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.cgColor
}
}
@IBInspectable var bgColor: UIColor? {
didSet {
backgroundColor = bgColor
}
}
@IBInspectable var placeHolderColor: UIColor? {
didSet {
let rawString = attributedPlaceholder?.string != nil ? attributedPlaceholder!.string : ""
let str = NSAttributedString(string: rawString, attributes: [NSForegroundColorAttributeName: placeHolderColor!])
attributedPlaceholder = str
}
}
}
その何もありませんあなたのコードに間違いがあります。 'layer.masksToBounds = cornerRadius> 0'を変更するとコーナーの半径は削除されますが、影が追加されます。 私はあなたが 'UIView'を作成して影を追加し、コーナーの半径を追加するビューをサブビューとして追加する必要があると言いました。基本的に 'cornerRadius'コードを適用し、影を2つの別々のビューにドロップします。 – Rikh
コミュニティが協力する場所、Rikhを手伝っていただきありがとうございます。それは有り難いです。 – MEnnabah