답변:
textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
빠른 사용에서 :
textField.contentVerticalAlignment = UIControlContentVerticalAlignment.center
textField.contentVerticalAlignment = .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)
}
placeholderRectForBounds
오른쪽으로 너무 확장되는 것 같아요 . 나는 올바른 견해를 가지고 있으며 다른 경계와 달리 그것에 들어갑니다. 방금 구현 textRectForBounds
하고 다른 두 기능에서 호출했습니다. :)
이것은 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 및 이전 버전 모두에서 작동합니다.
textField
그의UITextField
인스턴스 이름은 귀하 의 이름과 다를 수 있습니다. 그래서 그는 같은 것을 가질 것UITextField *textField = [[UITextField alloc] init];
입니다. 다른 변수 이름 (이외의 다른 사용하는 경우textField
애프터을*
), 당신은 할 필요가yourDifferentVariableNameHere.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter
대신.