Làm cách nào để tạo trung tâm căn chỉnh văn bản của UIButton? Sử dụng IB


139

Tôi không thể đặt tiêu đề của UIButton bằng cách sử dụng IB làm trung tâm. Tiêu đề của tôi là nhiều dòng.
Nó đang cho đi như thế này
nhập mô tả hình ảnh ở đây

Nhưng tôi muốn cái này
nhập mô tả hình ảnh ở đây

Tôi đã cho không gian trong này nhưng tôi không muốn làm điều đó. Vì nó không được căn chỉnh chính xác cho một số trường hợp và tôi biết có một thuộc tính của UILabel để đặt căn chỉnh nhưng tôi không muốn viết mã cho điều đó .. chỉ muốn đặt mọi thứ từ IB.

Cảm ơn


7
Kumar Rathor - thử mãself.yourButton.titleLabel.textAlignment = UITextAlignmentCenter;
Sagar R. Kothari

1
@Spark Tôi biết cách thực hiện điều này bằng mã nhưng điều tôi muốn là đặt nó bằng cách sử dụng 'IB'.
Inder Kumar Rathore

Tôi biết, bạn muốn đặt nó bằng IB. Nhưng tài sản như vậy chỉ có thể truy cập thông qua mã.
Sagar R. Kothari

Nó có thể truy cập thông qua IB bằng cách quy kết nó nhưng ai quan tâm đến điều đó!
Youssef Moawad 11/2/2015

@YoussefSami vâng, bạn đúng stackoverflow.com/a/5865500/468724
Inder Kumar Rathore

Câu trả lời:


197

Điều này sẽ làm chính xác những gì bạn đang mong đợi:

Mục tiêu-C:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

Đối với iOS 6 trở lên, nó

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

như được giải thích trong câu trả lời của tyler53

Nhanh:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center

Swift 4.x trở lên

myButton.titleLabel?.textAlignment = .center

1
Nó đã trở thành NSTextAlocation trong các phiên bản iOS sau này.
Sullivan

4
Mã này không hoạt động, câu trả lời tốt nhất là @joetjahmyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Alberto Mier

8
Câu hỏi đề cập rõ ràng đến IB , như trong Interface Builder . Đây không phải là câu trả lời chính xác, vì nó yêu cầu mã hóa.
SwiftArchitect

1
Swift 4: myButton.titleLabel? .TextAlocation = .center
Lewis Black

'Trung tâm' đã được đổi tên thành 'trung tâm'
ModusPwnens

106

Sử dụng dòng:

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Điều này nên tập trung vào nội dung (theo chiều ngang).

Và nếu bạn cũng muốn đặt văn bản bên trong nhãn thành trung tâm, hãy sử dụng:

[labelOne setTextAlignment:UITextAlignmentCenter];

Nếu bạn muốn sử dụng IB, tôi đã có một ví dụ nhỏ ở đây được liên kết trong XCode 4 nhưng phải cung cấp đủ chi tiết (cũng vậy, trên màn hình thuộc tính đó, nó hiển thị tab thuộc tính. Bạn có thể tìm thấy các tab tương tự trong XCode 3.x): nhập mô tả hình ảnh ở đây


1
cảm ơn ... nhưng tôi không muốn thiết lập nó thông qua IB. :( đó là lựa chọn cuối cùng của tôi để làm điều đó ...
Inder Kumar Rathore

1
@Inder Kumar Rathore: Không vấn đề gì. Để đặt nó trong IB, bạn nên nhấp vào nhãn, sau đó trong Trình kiểm tra thuộc tính, đặt Căn chỉnh thành "Trung tâm". Trong IB của tôi (XCode 4), nó có 3 biểu tượng hiển thị căn chỉnh văn bản. Rõ ràng, bạn nên chọn cái giữa rồi.
Joetjah

bạn có thể vui lòng gửi cho tôi ảnh chụp màn hình không ... Đây có phải là nhãn của Nút hoặc bạn đã kéo UILabel khỏi thư viện ??? Tôi cho rằng nó không phải là nhãn của nút
Inder Kumar Rathore

@Inder Kumar Rathore: Này, hãy xem ảnh chụp màn hình tôi đã thêm. Tôi thực sự đã nhầm loại nhãn bạn sử dụng, tôi vẫn đang suy nghĩ về UILabel thay vì văn bản trong UIButton. Ảnh chụp màn hình cho thấy cách căn chỉnh trên UIButton thông qua IB.
Joetjah

1
Sẽ không cho phép tôi chỉnh sửa, nhưng NSTextAlocateCenter đã thay thế UITextAlocateCenter. Họ có nghĩa chính xác cùng một điều tho. developer.apple.com/l
Library / iOS / documentation / Uitit / Reference / Lỗi

89

Giải pháp1

Bạn có thể đặt đường dẫn chính trong bảng phân cảnh

Đặt văn bản cho tiêu đề nhiều dòng của bạn, ví dụ hello + multiline

Bạn cần nhấn + để di chuyển văn bản sang dòng tiếp theo.

nhập mô tả hình ảnh ở đây

Sau đó thêm đường dẫn chính

titleLabel.textAlignmentas Numbervà value 1, 1có nghĩa là NSTextAlignmentCenter
titleLabel.numberOfLinesas Numbervà value 0, 0có nghĩa là bất kỳ số dòng nào

nhập mô tả hình ảnh ở đây

Điều này sẽ không được phản ánh trên IB / Xcode, nhưng sẽ ở trung tâm trong thời gian chạy (thiết bị / trình giả lập)

Nếu bạn muốn xem các thay đổi trên Xcode, bạn cần thực hiện các bước sau: (hãy nhớ rằng bạn có thể bỏ qua các bước này)

  1. Phân lớp UIButton để làm cho nút có thể thiết kế:

    import UIKit
    @IBDesignable class UIDesignableButton: UIButton {}

  2. Chỉ định lớp con có thể thiết kế này cho các nút bạn đang sửa đổi:

Hiển thị cách thay đổi lớp của nút bằng Trình tạo giao diện

  1. Nếu bạn thực hiện đúng, bạn sẽ thấy cập nhật trực quan trong IB khi trạng thái Designables là "Cập nhật" (có thể mất vài giây):

So sánh nút có thể thiết kế và mặc định trong Trình tạo giao diện



Giải pháp2

Nếu bạn muốn viết mã, sau đó thực hiện quá trình dài

1.Tạo IBOutletnút 2.
Viết mã trong viewDidLoad

btn.titleLabel.textAlignment = .Center
btn.titleLabel.numberOfLines = 0


Giải pháp3

Trong phiên bản mới hơn của xcode (của tôi là xcode 6.1), chúng ta có tiêu đề do thuộc tính
Chọn Attributedsau đó chọn văn bản và nhấn tùy chọn trung tâm bên dưới

PS Văn bản không xuất hiện nhiều dòng vì tôi phải đặt

btn.titleLabel.numberOfLines = 0

nhập mô tả hình ảnh ở đây


Đối với giải pháp 3, bạn chỉ cần thêm Line Breaking = Clip, nó sẽ chuyển đổi văn bản thành đa dòng
finx

Giải pháp 3 có vấn đề, ít nhất là với Xcode 11.3.1: khi tôi thay đổi tiêu đề của nút, nó không hoạt động. Khi tôi sử dụng btn.titleLabel.textAlignment, nó hoạt động rất tốt.
Brian Hồng

27

Đối với UIButton, bạn nên sử dụng: -

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];

16

Dành cho ios 8 và Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

hoặc là

btn.titleLabel.textAlignment = .Center


13

Đối với những người hiện đang sử dụng iOS 6 trở lên, UITextAlocateCenter đã không được chấp nhận. Bây giờ là NSTextAlocateCenter

VÍ DỤ: mylabel.textAlignment = NSTextAlignmentCenter;Hoạt động hoàn hảo.


11

Đối với nhanh 4, xcode 9

myButton.contentHorizontalAlignment = .center

Tôi đặt myButton.titleLabel? .NumberOfLines = 0 và nó khiến nhãn trong nút ở giữa, vì vậy tôi đã cố gắng tìm ra cách căn chỉnh văn bản sang trái trong nút và điều này đã hoạt động, tuy nhiên, đặt nó thành .left.
mã tối đa

7

Giả sử btn đề cập đến một UIButton, để thay đổi chú thích nhiều dòng thành trung tâm theo chiều ngang, bạn có thể sử dụng câu lệnh sau trong iOS 6 trở lên:

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;

4

UITextAlignmentCenter không dùng nữa trong iOS6

Thay vào đó bạn có thể sử dụng mã này:

btn.titleLabel.textAlignment=NSTextAlinmentCenter;


Không có tài sản cho văn bản UIButton callee.
Ravi

Không có tài sản nào cho UIButton trong iOS
Jayprakash Dubey

Anh ta có nghĩa là button.titleLabel.textAlocation
OC Rickard


4

Dành cho Swift 4:

@IBAction func myButton(sender: AnyObject) {
    sender.titleLabel?.textAlignment = NSTextAlignment.center
    sender.setTitle("Some centered String", for:UIControlState.normal)
}

sử dụng một "?" trong sender.titleLabel? thay thế "??"
Đăng nhập

3

Trên thực tế bạn có thể làm điều đó trong trình xây dựng giao diện.

Bạn nên đặt Tiêu đề thành "Thuộc tính" và sau đó chọn căn chỉnh trung tâm.


Nếu nó được quy cho chúng ta không thể thiết lập màu văn bản, phông chữ vv thông qua Storyboard.
Vineesh TP

3

Hãy thử như thế này:

yourButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

2

Bạn có thể làm điều này từ bảng phân cảnh. Chọn nút của bạn. Đặt ngắt dòng 'Word Wrap', Đặt tiêu đề của bạn 'Plain' thành 'Attribution'. Chọn 'Căn chỉnh trung tâm'. Phần này rất quan trọng => Nhấp vào ... (Thêm) Nút. Và chọn chế độ ngắt dòng để 'Gói nhân vật'.


1

UIButton sẽ không hỗ trợ setTextAlocation. Vì vậy, bạn cần phải đi với setContentHTHERAlocation để căn chỉnh văn bản nút

Cho bạn tham khảo

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
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.