123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- //
- // NSString+TruncateToWidth.m
- // Nextcloud
- //
- // Created by Marino Faggiana on 06/04/16.
- // Copyright (c) 2016 Marino Faggiana. All rights reserved.
- //
- // Author Marino Faggiana <marino.faggiana@nextcloud.com>
- //
- // This program is free software: you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation, either version 3 of the License, or
- // (at your option) any later version.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with this program. If not, see <http://www.gnu.org/licenses/>.
- //
- #import "NSString+TruncateToWidth.h"
- #define ellipsis @"…"
- @implementation NSString (TruncateToWidth)
- - (NSString*)stringByTruncatingToWidth:(CGFloat)width withFont:(UIFont *)font atEnd:(BOOL)atEnd
- {
- // Create copy that will be the returned result
- NSMutableString *truncatedString = [self mutableCopy];
-
- // Make sure string is longer than requested width
- if ([self widthWithFont:font] > width)
- {
- // Accommodate for ellipsis we'll tack on the beginning
- width -= [ellipsis widthWithFont:font];
-
- // Loop, deleting characters until string fits within width
- while ([truncatedString widthWithFont:font] > width)
- {
- NSRange range;
-
- if (atEnd) {
- range.location = [truncatedString length] -1;
- range.length = 1;
- }else {
- range.location = 0;
- range.length = 1;
- }
-
- // Delete character
- [truncatedString deleteCharactersInRange:range];
- }
-
- // Append ellipsis
- if (atEnd) truncatedString = (NSMutableString *)[truncatedString stringByAppendingString:ellipsis];
- else [truncatedString replaceCharactersInRange:NSMakeRange(0, 0) withString:ellipsis];
- }
-
- return truncatedString;
- }
- - (CGFloat)widthWithFont:(UIFont *)font
- {
- return [self sizeWithAttributes:@{NSFontAttributeName:font}].width;
- }
- @end
|