2016-11-18 2 views
4

모서리 반경과 자리 표시 자 색 및 다른 속성을 제어하는 ​​사용자 지정 코드가있는 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 
     } 
    } 

} 

답변

2

에 모서리 반경을 추가하면clipsToBounds 또는 masksToBounds을 true로 설정해야합니다. 그림자가 만들어지면 그림자가 만들어지지 않습니다. 바깥 쪽은입니다. 이 문제에 대한 해결책으로

, 당신은 잘린 모서리가있는 UIViewsuperView을 만들어야합니다, 그리고

+0

그것의 아무것도 (색상을 지우하기 위해 수퍼를 설정해야합니다)이 superView에 그림자를 추가 코드가 잘못되었습니다. 'layer.masksToBounds = cornerRadius> 0 '을 변경하면 코너 반경은 제거되지만 그림자가 추가됩니다. 내가 말했듯이 'UIView'를 만들고 그림자를 추가하고 코너 반경을 추가하는 뷰를 하위 뷰로 추가해야합니다. 기본적으로'cornerRadius' 코드를 적용하고 그림자를 두 개의 개별 뷰에 드롭합니다. – Rikh

+0

공동체 인 Rikh를 돕는 시간을 내 주셔서 감사합니다. 감사합니다. – MEnnabah

관련 문제