UIButton의 titleLabel에 대한 x, y 위치를 조정할 수 있습니까?


121

그것을위한 X, Y 위치를 조정할 수있다 titleLabel(A)의를 UIButton?

내 코드는 다음과 같습니다.

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [btn setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
    [btn setTitle:[NSString stringWithFormat:@"Button %d", i+1] forState:UIControlStateNormal];     
    [btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    btn.titleLabel.frame = ???

1
매우 부정적인 답변을 삭제할 수 있도록 다른 답변을 선택하세요. 아니면 그 이유를 설명하십시오.
tchrist

1
왜 그 대답이 받아 들여지지 않습니까?
Antonio MG

이것은 당신이 필요로하는 모든 것입니다 stackoverflow.com/questions/18484747/uibutton-titleedgeinsets

답변:


445
//make the buttons content appear in the top-left
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentTop];

//move text 10 pixels down and right
[button setTitleEdgeInsets:UIEdgeInsetsMake(10.0f, 10.0f, 0.0f, 0.0f)];

그리고 Swift에서

//make the buttons content appear in the top-left
button.contentHorizontalAlignment = .Left
button.contentVerticalAlignment = .Top

//move text 10 pixels down and right
button.titleEdgeInsets = UIEdgeInsetsMake(10.0, 10.0, 0.0, 0.0)

스위프트 5

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.titleEdgeInsets = UIEdgeInsets(top: 10.0, left: 10.0, bottom: 0.0, right: 0.0)

3
이것은 확실히 최고의 답변입니다
greenisus

3
질문자가 다른 대답을 선택한 이유가 궁금합니다. 이것은 훨씬 낫습니다.
Joshua

4
처음 두 줄도 필요하지 않았습니다 setTitleEdgeInsets:. 텍스트를 이동하는 데 필요한 전부였습니다.
ArtOfWarfare

이것은 확실히 정확하지만 인터페이스 빌더를 사용하여 수행하는 것이 더 쉬울 것입니다 (내 대답에 설명되어 있음).
eladleb

처음 두 줄은 텍스트를 0,0 (x, y)에 배치합니다. 이것은 상대적 위치를 방지 할 수 있습니다. 특히 xib에서 기본 정렬을 설정 한 경우.
Jarrett Barnett 2013

40

시각적으로 수행하는 가장 쉬운 방법 은 속성 검사기 ** (xib / 스토리 보드를 편집 할 때 나타남)를 사용하고 " edge "속성을 제목으로 설정하고 인세 트를 조정 한 다음 "edge"속성을 이미지로 설정하고 그에 따라 조정하는 것입니다. . 일반적으로 코딩하는 것보다 낫습니다. 유지 관리가 더 쉽고 시각적으로도 좋기 때문입니다.

속성 검사기 설정


1
삽입 을 변경 하고 조정 Edge하는 좋은 팁 Title!
Dean

나중에 참조 edge할 수 있도록 Xcode 8부터 속성을 설정하는 대신 크기 검사기에서 제목 삽입을 조정할 수 있습니다.
dbmrq

14

UIButton에서 파생하고 다음 메서드를 구현합니다.

- (CGRect)titleRectForContentRect:(CGRect)contentRect;

편집하다:

@interface PositionTitleButton : UIButton
@property (nonatomic) CGPoint titleOrigin;
@end

@implementation PositionTextButton
- (CGRect)titleRectForContentRect:(CGRect)contentRect {
  contentRect.origin = titleOrigin;
  return contentRect;
}
@end

감사합니다. 이것이 제가 실제로 필요한 것입니다. 자동 센터링으로는 충분하지 않았습니다.
dmzza 2014 년

4

내 프로젝트에는 다음과 같은 확장 유틸리티가 있습니다.

extension UIButton {

    func moveTitle(horizontal hOffset: CGFloat, vertical vOffset: CGFloat) {
        self.titleEdgeInsets.left += hOffset
        self.titleEdgeInsets.top += vOffset
    }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.