2016-10-09 2 views
0

UITextField에 밑줄을 긋기에 대한 질문이 있습니다. 아래 그림과 같이 양쪽 끝에 막대가있는 밑줄을 표시하려고합니다. Swift의 UITextField 사용자 정의 밑줄

enter image description here

나는 다음과 같은 노력이 하나있어. 오른쪽 끝에 막대가 없습니다.

enter image description here

extension UITextField { 
func underline() { 
    let borderWidth = CGFloat(1.0) 
    let endBorderHeight = CGFloat(10.0) 

    let bottom = CALayer() 
    bottom.frame = CGRect(
     x: 1, 
     y: self.frame.height - borderWidth, 
     width: self.frame.width - 2, 
     height: borderWidth) 

    bottom.borderWidth = borderWidth 
    bottom.borderColor = UIColor.lightGrayColor().CGColor 

    let leftEndBorder = CALayer() 
    leftEndBorder.frame = CGRect(
     x: 0, 
     y: self.frame.height - endBorderHeight, 
     width: borderWidth, 
     height: endBorderHeight) 
    leftEndBorder.borderWidth = borderWidth 
    leftEndBorder.borderColor = UIColor.lightGrayColor().CGColor 

    print(bottom.frame.width) 
    let rightEndBorder = CALayer() 
    rightEndBorder.frame = CGRect(
     x: self.frame.width - 1, 
     y: self.frame.height - endBorderHeight, 
     width: borderWidth, 
     height: endBorderHeight) 

    rightEndBorder.borderWidth = borderWidth 
    rightEndBorder.borderColor = UIColor.lightGrayColor().CGColor 

    self.layer.addSublayer(leftEndBorder) 
    self.layer.addSublayer(bottom) 
    self.layer.addSublayer(rightEndBorder) 
    self.layer.masksToBounds = true 
    } 
} 

나는 왼쪽에있는 줄을 만들 수 있지만, 가진 문제 때문에 rightEndBorder 아마의 잘못된 x 위치의 오른쪽을?

누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까 ??

는 ----- 편집

나는 200에 rightEndBorder의 x 위치를 설정하기 위해 시도하고 나에게 다음을 주었다.

enter image description here

하지만 300로 설정하려고하면, 나는 그것을 더 이상 볼 수 없습니다.

----- 전체 텍스트 필드가 화면에 표시 한 경우 검사 편집

.

enter image description here

는 ----- 편집

이 텍스트 필드의 폭을 변경 한 선행 및 후행 제약 같아요이었다.

enter image description here

----- 솔루션

문제는 내가 선도하고 텍스트 필드에 제약을 후행했다고이고 unline가 삽입 된 후 그 제약 폭을 변경했습니다. Google 검색 후, 제약 조건이 함수에 적용된 후 밑줄을 작성해야한다고 생각했습니다. viewDidLayoutSubviews().

+0

이 코드를 실행 한 후 textField 너비를 변경 하시겠습니까? –

+0

@IanMoses 스토리 보드에 설정된 제약 조건이 너비를 변경하지 않는다고 생각합니다.스토리 보드에 텍스트 필드를 만들고 viewDidLoad()에 밑줄을 추가했습니다. – eChung00

+0

초기화 후 텍스트 필드와 텍스트 필드 rightEndBorder x-origins를 인쇄 할 수 있습니까? 이 값들은 무엇입니까? –

답변

1

답글로 의견 섹션에서 다시 입력하십시오.

문제는보기가 잘리지 않아서 (오른쪽 테두리가 표시되지 않음) 오른쪽 가장자리가 설정 후 오른쪽으로 이동하는 것 같습니다. 이것을 의심하는 이유는 오른쪽 테두리가 x = 200에 위치하는 그림에서 비롯된 것입니다. 왜냐하면 아래쪽 경계선을 따라 반 이상 지나지 만 라인을 따라가는 길의 40 %에 불과하기 때문입니다.

업데이트 :이 질문에 대한 정답은 부과 된 제약은 텍스트 필드의 폭이 변경시켰다

.

+0

고마워요. 이안. – eChung00

+0

문제 없습니다. 도와 드리겠습니다. –

관련 문제