Có thể điều chỉnh vị trí x, y cho titleLabel of UIButton không?


121

Có thể điều chỉnh vị trí x, y cho titleLabelcủa a UIButtonkhông?

Đây là mã của tôi:

    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
Vui lòng chọn câu trả lời khác để chúng tôi có thể xóa câu trả lời rất phủ định. Hoặc giải thích lý do tại sao bạn đã làm điều này.
tchrist

1
Tại sao câu trả lời đó không được chấp nhận?
Antonio MG,

Câu trả lời:


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)];

Và trong 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)

Swift 5

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

3
điều này chắc chắn là câu trả lời tốt nhất
greenisus

3
Tôi tự hỏi tại sao người hỏi lại chọn câu trả lời khác. Cái này tốt hơn nhiều.
Joshua

4
Tôi thậm chí không cần hai dòng đầu tiên ... setTitleEdgeInsets:là tất cả những gì tôi thấy cần thiết để chuyển văn bản.
ArtOfWarfare

Điều này chắc chắn đúng, nhưng có lẽ dễ thực hiện hơn bằng cách sử dụng trình tạo giao diện (như được mô tả trong câu trả lời của tôi).
eladleb

Hai dòng đầu tiên đặt văn bản của bạn thành 0,0 (x, y). Điều này có thể ngăn cản việc định vị tương đối; đặc biệt nếu bạn đặt căn chỉnh mặc định trong xib.
Jarrett Barnett

40

Cách dễ nhất để thực hiện điều đó một cách trực quan là sử dụng trình kiểm tra thuộc tính ** (xuất hiện khi chỉnh sửa xib / bảng phân cảnh), đặt thuộc tính " edge " thành tiêu đề, điều chỉnh nội dung của nó, sau đó đặt thuộc tính "edge" cho hình ảnh và điều chỉnh cho phù hợp . Nó thường tốt hơn viết mã, vì nó dễ bảo trì hơn và có tính trực quan cao.

Cài đặt trình kiểm tra thuộc tính


1
Mẹo hay để thay đổi Edgethành Titlevà sau đó điều chỉnh nội dung!
Dean,

Để tham khảo trong tương lai, kể từ Xcode 8, thay vì đặt thuộc edgetính, bạn có thể điều chỉnh nội dung tiêu đề trong Trình kiểm tra kích thước.
dbmrq

14

Bắt nguồn từ UIButton và thực hiện phương pháp sau:

- (CGRect)titleRectForContentRect:(CGRect)contentRect;

Biên tập:

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

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

Cảm ơn, đây là những gì tôi thực sự cần. Căn giữa tự động là không đủ.
dmzza

4

Đối với các dự án của tôi, tôi có tiện ích mở rộng này:

extension UIButton {

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

}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.