Ich muss ein durchgestrichenes UILabel zeichnen. Deshalb habe ich UILabel in Unterklassen unterteilt und wie folgt implementiert:
@implementation UIStrikedLabel
- (void)drawTextInRect:(CGRect)rect{
[super drawTextInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextFillRect(context,CGRectMake(0,rect.size.height/2,rect.size.width,1));
}
@end
Was passiert ist, dass das UILabel durchgestrichen wird, wobei eine Zeile so lang ist wie das gesamte Label, aber der Text kann kürzer sein. Gibt es eine Möglichkeit, die Länge des Textes in Pixel zu bestimmen, damit die Linie entsprechend gezeichnet werden kann?
Ich bin auch offen für andere Lösungen, falls bekannt :)
Am besten, Erik
quelle
label.attributedText.size
.Eine bessere Lösung hier in Swift :
Update:
Für
Swift 3/4
:@IBOutlet weak var testLabel: UILabel! // in any function testLabel.text = "New Label Text" let width = testLabel.intrinsicContentSize.width let height = testLabel.intrinsicContentSize.height print("width:\(width), height: \(height)")
Alte Antwort:
yourLabel?.text = "Test label text" // sample label text let labelTextWidth = yourLabel?.intrinsicContentSize().width let labelTextHeight = yourLabel?.intrinsicContentSize().height
quelle
let sanskritLabel = UILabel(frame: CGRectMake(0, 120, sanskritStringSize.width, sanskritStringSize.height))
Das wird funktionieren. Versuch es
NSDictionary *attrDict = @{NSFontAttributeName : [GenericUtility getOpenSansRegularFontSize:12]}; CGSize stringBoundingBox = [selectedReservationModel.DateLabel sizeWithAttributes: attrDict]; lblDeliveryDateWidth = stringBoundingBox.width;
quelle