Tôi đang sao chép Câu hỏi Câu hỏi tương tự đã được hỏi trước đó. Tôi đã thử giải pháp được đưa ra nhưng do kích thước vừa vặn Nó không hoạt động khi tôi sử dụng Autolayout nên không có giải pháp nào.
Màn hình dự kiến sẽ như sau.
biên tập
Trong câu trả lời ban đầu, tôi đã sử dụng kiểu đoạn văn cho các thẻ. Thực tế, đối với nhãn nhiều dòng, điều này thực sự ngăn không cho nhãn trở thành nhãn nhiều dòng. Cuối cùng tôi đã loại nó ra khỏi phép tính của mình. hiện hữu Github Xem thêm trong
Đối với những người thoải mái hơn khi làm việc với mã nguồn mở, hãy nhớ kiểm tra Nhãn Thuộc tính TTTNơi bạn có thể thiết lập căn chỉnh văn bản của nhãn thành TTTAttributedLabelVerticalAlignmentTop
Bí quyết là sự thừa kế Nhãn UI
và che phủ vẽ Văn Bản Trong Hình Chữ Nhật
. Sau đó buộc văn bản được vẽ ở gốc đường viền của nhãn.
Sau đây là cách triển khai đơn giản mà bạn có thể sử dụng ngay:
nhanh
@IBDesignable lớp TopAlignedLabel: UILabel {
ghi đè hàm drawTextInRect(rect: CGRect) {
nếu để stringText = text {
hãy để stringTextAsNSString = stringText như NSString
var labelStringSize = stringTextAsNSString.boundingRectWithSize(CGSizeMake(CGRectGetWidth(self.frame), CGFloat.max),
tùy chọn: NSStringDrawingOptions.UsesLineFragmentOrigin,
thuộc tính: [NSFontAttributeName: phông chữ],
ngữ cảnh: nil).size
super.drawTextInRect(CGRectMake(0, 0, CGRectGetWidth(self.frame), ceil(labelStringSize.height)))
} khác {
super.drawTextInRect(hình chữ nhật)
}
}
ghi đè func prepareForInterfaceBuilder() {
siêu.prepareForInterfaceBuilder()
layer.borderWidth = 1
layer.borderColor = UIColor.blackColor().CGColor
}
}
Nhanh 3
@IBDesignable lớp TopAlignedLabel: UILabel {
ghi đè func drawText(in rect: CGRect) {
nếu để stringText = text {
hãy để stringTextAsNSString = stringText như NSString
hãy để labelStringSize = stringTextAsNSString.boundingRect(với: CGSize(chiều rộng: self.frame.width, chiều cao: CGFloat.greatestFiniteMagnitude),
tùy chọn: NSStringDrawingOptions.usesLineFragmentOrigin,
thuộc tính: [NSFontAttributeName: phông chữ],
ngữ cảnh: nil).size
super.drawText(trong: CGRect(x:0,y:0,width:self.frame.width, height:ceil(labelStringSize.height)))
} khác {
super.drawText(trong: hình chữ nhật)
}
}
ghi đè func prepareForInterfaceBuilder() {
siêu.prepareForInterfaceBuilder()
layer.borderWidth = 1
layer.borderColor = UIColor.black.cgColor
}
}
Mục tiêu-C
IB_CÓ THỂ THIẾT KẾ
@interface TopAlignedLabel: Nhãn UI
@kết thúc
@implementation Nhãn TopAligned
- (void)drawTextInRect:(CGRect)rect {
nếu (self.text) {
CGSize nhãnStringSize = [self.text boundingRectWithSize:CGSizeMake(CGRectGetWidth(self.frame), CGFLOAT_MAX)
tùy chọn:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
thuộc tính:@{NSFontAttributeName:self.font}
ngữ cảnh:nil].kích thước;
[siêu drawTextInRect:CGRectMake(0, 0, ceilf(CGRectGetWidth(self.frame)),ceilf(labelStringSize.height))];
} khác {
[siêu drawTextInRect:rect];
}
}
- (void)prepareForInterfaceBuilder {
[siêu chuẩn bị cho Giao diện Xây dựng];
chiều rộng của lớp biên giới = 1;
self.layer.borderColor = [UIColor blackColor].CGColor;
}
@kết thúc
Vì tôi đã sử dụng IBDesignable nên bạn có thể thêm nhãn này vào Storyboard của mình và xem nó chạy, đây là cách hiệu quả với tôi
Tôi là một lập trình viên xuất sắc, rất giỏi!