Created
January 12, 2014 12:05
-
-
Save radianttap/8383797 to your computer and use it in GitHub Desktop.
Change multi-font attributes on preferredContentSizeChanged notification.
From this: http://stackoverflow.com/questions/18928620/handling-uicontentsizecategorydidchangenotification-for-nsattributedstring-in-ui
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (void)preferredContentSizeChanged:(NSNotification *)aNotification | |
{ | |
UITextView *textView = <the text view holding your attributed text> | |
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:textView.attributedText]; | |
NSRange range = NSMakeRange(0, attributedString.length - 1); | |
// Walk the string's attributes | |
[attributedString enumerateAttributesInRange:range options:NSAttributedStringEnumerationReverse usingBlock: | |
^(NSDictionary *attributes, NSRange range, BOOL *stop) { | |
// Find the font descriptor which is based on the old font size change | |
NSMutableDictionary *mutableAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; | |
UIFont *font = mutableAttributes[@"NSFont"]; | |
UIFontDescriptor *fontDescriptor = font.fontDescriptor; | |
// Get the text style and get a new font descriptor based on the style and update font size | |
id styleAttribute = [fontDescriptor objectForKey:UIFontDescriptorTextStyleAttribute]; | |
UIFontDescriptor *newFontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:styleAttribute]; | |
// Get the new font from the new font descriptor and update the font attribute over the range | |
UIFont *newFont = [UIFont fontWithDescriptor:newFontDescriptor size:0.0]; | |
[attributedString addAttribute:NSFontAttributeName value:newFont range:range]; | |
}]; | |
textView.attributedText = attributedString; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment