From a40c2b903400b0fad229aa86686e0826df051c32 Mon Sep 17 00:00:00 2001 From: Katerina Kostritsyna Date: Fri, 6 Apr 2018 16:56:43 +0700 Subject: [PATCH] Multiline title support --- ALAlertBanner/ALAlertBanner.m | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/ALAlertBanner/ALAlertBanner.m b/ALAlertBanner/ALAlertBanner.m index c011d61..f610d93 100755 --- a/ALAlertBanner/ALAlertBanner.m +++ b/ALAlertBanner/ALAlertBanner.m @@ -48,6 +48,18 @@ this software and associated documentation files (the "Software"), to deal in static CGFloat const kForceHideAnimationDuration = 0.1f; + +@interface NSMutableParagraphStyle (LineBreak) ++ (NSMutableParagraphStyle *)defaultParagraphStyleWithLineBreakMode:(NSLineBreakMode)breakMode; +@end +@implementation NSMutableParagraphStyle(LineBreak) ++ (NSMutableParagraphStyle *)defaultParagraphStyleWithLineBreakMode:(NSLineBreakMode)breakMode { + NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; + [style setLineBreakMode:breakMode]; + return style; +} +@end + #define AL_DEVICE_ANIMATION_DURATION UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? kRotationDurationIPad : kRotationDurationIphone; //macros referenced from MBProgressHUD. cheers to @matej @@ -55,7 +67,7 @@ this software and associated documentation files (the "Software"), to deal in #define AL_SINGLELINE_TEXT_HEIGHT(text, font) [text length] > 0 ? [text sizeWithAttributes:nil].height : 0.f; #define AL_MULTILINE_TEXT_HEIGHT(text, font, maxSize, mode) [text length] > 0 ? [text boundingRectWithSize:maxSize \ options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) \ - attributes:nil \ + attributes:@{NSFontAttributeName: font, NSParagraphStyleAttributeName: [NSMutableParagraphStyle defaultParagraphStyleWithLineBreakMode:mode]} \ context:NULL].size.height : 0.f; #else #define AL_SINGLELINE_TEXT_HEIGHT(text, font) [text length] > 0 ? [text sizeWithFont:font].height : 0.f; @@ -174,12 +186,12 @@ - (void)setupSubviews { _titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:13.f]; _titleLabel.textColor = [UIColor colorWithWhite:1.f alpha:0.9f]; _titleLabel.textAlignment = NSTextAlignmentLeft; - _titleLabel.numberOfLines = 1; - _titleLabel.lineBreakMode = NSLineBreakByTruncatingTail; _titleLabel.layer.shadowColor = [UIColor blackColor].CGColor; _titleLabel.layer.shadowOffset = CGSizeMake(0.f, -1.f); _titleLabel.layer.shadowOpacity = 0.3f; _titleLabel.layer.shadowRadius = 0.f; + _titleLabel.numberOfLines = 0; + _titleLabel.lineBreakMode = NSLineBreakByWordWrapping; [self addSubview:_titleLabel]; _subtitleLabel = [[UILabel alloc] init]; @@ -531,7 +543,7 @@ - (void)setInitialLayout { BOOL isSuperviewKindOfWindow = ([superview isKindOfClass:[UIWindow class]]); CGSize maxLabelSize = CGSizeMake(superview.bounds.size.width - (kMargin*3) - self.styleImageView.image.size.width, CGFLOAT_MAX); - CGFloat titleLabelHeight = AL_SINGLELINE_TEXT_HEIGHT(self.titleLabel.text, self.titleLabel.font); + CGFloat titleLabelHeight = AL_MULTILINE_TEXT_HEIGHT(self.titleLabel.text, self.titleLabel.font, maxLabelSize, self.titleLabel.lineBreakMode); CGFloat subtitleLabelHeight = AL_MULTILINE_TEXT_HEIGHT(self.subtitleLabel.text, self.subtitleLabel.font, maxLabelSize, self.subtitleLabel.lineBreakMode); CGFloat heightForSelf = titleLabelHeight + subtitleLabelHeight + (self.subtitleLabel.text == nil || self.titleLabel.text == nil ? kMargin*2 : kMargin*2.5); @@ -578,7 +590,7 @@ - (void)setInitialLayout { - (void)updateSizeAndSubviewsAnimated:(BOOL)animated { CGSize maxLabelSize = CGSizeMake(self.superview.bounds.size.width - (kMargin*3.f) - self.styleImageView.image.size.width, CGFLOAT_MAX); - CGFloat titleLabelHeight = AL_SINGLELINE_TEXT_HEIGHT(self.titleLabel.text, self.titleLabel.font); + CGFloat titleLabelHeight = AL_MULTILINE_TEXT_HEIGHT(self.titleLabel.text, self.titleLabel.font, maxLabelSize, self.titleLabel.lineBreakMode); CGFloat subtitleLabelHeight = AL_MULTILINE_TEXT_HEIGHT(self.subtitleLabel.text, self.subtitleLabel.font, maxLabelSize, self.subtitleLabel.lineBreakMode); CGFloat heightForSelf = titleLabelHeight + subtitleLabelHeight + (self.subtitleLabel.text == nil || self.titleLabel.text == nil ? kMargin*2.f : kMargin*2.5f);