[ios] UITextField 텍스트를 세로로 가운데에 배치하려면 어떻게합니까?

나는 단순히 UITextField텍스트를 세로로 가운데에 두지 않는다는 것을 알리고 주목하고 있습니다. 대신, 그것은 버튼의 상단과 같은 높이이며, 기본값이 수직으로 가운데에 오를 것으로 예상하기 때문에 이상하게 보입니다. 세로로 가운데에 맞추거나 누락 된 기본 설정이 있습니까?



답변

textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

빠른 사용에서 :

textField.contentVerticalAlignment = UIControlContentVerticalAlignment.center


답변

이것은 잠재적으로 몇 가지 복잡한 요소를 가지고 있으며, 일부는 이전 답변에서 암시되었습니다.

  • 정렬하려는 것 (숫자, 문자, 대문자 또는 혼합)
  • 자리 표시 자
  • 지우기 버튼

어떤 글꼴에있는 점의 수직으로 인한 라인 높이, 어 센더, 디 센더 등을 중심으로해야하기 때문에 당신이 정렬하려는 것은 중요하다 (소스 ilovetypography.com ) 에 (이미지 덕분에 http://ilovetypography.com/2009 / 01 / 14 / 눈에 띄지 않는 수직 메트릭 / )
세로 글꼴 특성

예를 들어 숫자 만 다룰 때는 표준 중심 정렬이 제대로 보이지 않습니다. 아래의 코드에서 동일한 정렬을 사용하는 두 가지의 차이점을 비교하십시오. 하나는 정확하고 다른 것은 약간 다르게 보입니다.

여러 글자가 섞여서 옳지 않습니다.

중심이 아닌 글자

하지만 그냥 숫자라면 제대로 보입니다

중심으로 보이는 숫자

불행히도 시각적으로 올바르게 보이려면 약간의 시행 착오와 수동 조정이 필요할 수 있습니다.

아래 코드를 UITextField의 하위 클래스에 배치했습니다. 존재하는 지우기 버튼을 고려하여 수퍼 클래스 메소드를 호출합니다.

override func awakeFromNib() {
    contentVerticalAlignment = UIControlContentVerticalAlignment.Center
}

override func textRectForBounds(bounds: CGRect) -> CGRect {
    let boundsWithClear = super.textRectForBounds(bounds)
    let delta = CGFloat(1)
    return CGRect(x: boundsWithClear.minX, y: delta, width: boundsWithClear.width, height: boundsWithClear.height - delta/2)
}

override func editingRectForBounds(bounds: CGRect) -> CGRect {
    let boundsWithClear = super.editingRectForBounds(bounds)
    let delta = CGFloat(1)
    return CGRect(x: boundsWithClear.minX, y: delta, width: boundsWithClear.width, height: boundsWithClear.height - delta/2)
}

override func placeholderRectForBounds(bounds: CGRect) -> CGRect {
    let delta = CGFloat(1)
    return CGRect(x: bounds.minX, y: delta, width: bounds.width, height: bounds.height - delta/2)
}


답변

스토리 보드에서 : 제어 아래-> 필요에 따라 수직 및 수평 정렬을 변경하십시오.

여기에 이미지 설명을 입력하십시오


답변

이것은 textField의 텍스트에 적합합니다. 그러나 자리 표시 자 텍스트 (텍스트 필드가 비어있는 동안 표시되는 텍스트)를 사용하려는 경우 iOS 7에서 문제가 발생합니다.

TextField 클래스를 재정 의하여 해결했습니다.

- (void) drawPlaceholderInRect:(CGRect)rect

방법.

이처럼 :

- (void) drawPlaceholderInRect:(CGRect)rect
{
    [[UIColor blueColor] setFill];
    CGRect placeholderRect = CGRectMake(rect.origin.x, (rect.size.height- self.font.pointSize)/2, rect.size.width, self.font.pointSize);
    [[self placeholder] drawInRect:placeholderRect withFont:self.font lineBreakMode:NSLineBreakByWordWrapping alignment:self.textAlignment];
}

iOS7 및 이전 버전 모두에서 작동합니다.


답변