나는 단순히 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 및 이전 버전 모두에서 작동합니다.