Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# SSDynamicText CHANGELOG

## 0.5.1
###### unreleased

- **(fixed)** Fixed `titleLabel` font upgrade for `SSDynamicButton` after font change, [#27](https://github.com/splinesoft/SSDynamicText/issues/8). _([Grubas7](https://github.com/Grubas7))_

## 0.5.0
###### October 5, 2015

Expand Down
7 changes: 1 addition & 6 deletions Example/SSDynamicTextTests/SSDynamicButtonTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,6 @@ - (void)testButtonTitleLabelFontSizeShouldBeEqualToLabelFontSizeIncreasedByPrefe
}
}

/**
Uncomment after fix: https://github.com/splinesoft/SSDynamicText/issues/27
- (void)testButtonTitleLabelFontSizeShouldBeEqualToNewFontSizeIncreasedByContentSizeCategoryDelta {
//Arrange
CGFloat newFontSize = 7.0f;
Expand All @@ -103,9 +101,8 @@ - (void)testButtonTitleLabelFontSizeShouldBeEqualToNewFontSizeIncreasedByContent
XCTAssertEqualWithAccuracy(button.titleLabel.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge, FLT_EPSILON);
}
}
*/

- (void)testButtonTitleLabelAttributedStringFontSizesShouldBeIncreasedByContentSizeCategoryDelta {
- (void)testButtonTitleLabelAttributedTitleFontSizesShouldBeIncreasedByContentSizeCategoryDelta {
//Arrange
NSAttributedString *attributedString = [SSAttributedStringValidator testAttributedString];

Expand All @@ -120,8 +117,6 @@ - (void)testButtonTitleLabelAttributedStringFontSizesShouldBeIncreasedByContentS
//Assert
XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:button.titleLabel.attributedText
changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]);

XCTAssertEqualObjects(button.titleLabel.attributedText.string, attributedString.string);
}
}

Expand Down
40 changes: 33 additions & 7 deletions Example/SSDynamicTextTests/UIView+SSTextSizeTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
// Copyright (c) 2015 Splinesoft. All rights reserved.
//

#import "UIView+SSTextSize.h"
#import "SSDynamicLabel.h"
#import <XCTest/XCTest.h>
#import "SSTestsHelper.h"

#import <XCTest/XCTest.h>
#import "UIView+SSTextSize.h"
#import "SSDynamicLabel.h"

@interface UIView_SSTextSizeTests : XCTestCase

Expand Down Expand Up @@ -51,7 +51,7 @@ - (void)testDefaultBaseSizeShouldBeEqualTo16IfInfoBundleNotSet {
CGFloat baseSize = [self.label ss_defaultBaseSize];

//Assert
XCTAssertEqualWithAccuracy(16, baseSize, FLT_EPSILON, @"Default base size should be 16");
XCTAssertEqualWithAccuracy(baseSize, 16, FLT_EPSILON, @"Default base size should be 16");

//Clean Up
[SSTestsHelper stopMockingBundleDictionary];
Expand All @@ -68,12 +68,12 @@ - (void)testDefaultFontNameShouldBeEqualToInfoBundleIfSet {
//Assert
XCTAssertEqualObjects(fontName, expectedfontName, @"Default base name should be %@", expectedfontName);

// Clean Up
//Clean Up
[SSTestsHelper stopMockingBundleDictionary];
}

- (void)testDefaultFontNameShouldBeEqualToSystemFontIfInfoBundleNotSet {
// Arrange
//Arrange
NSString *expectedFontName = [UIFont systemFontOfSize:SSTestFontSize].fontName;
[SSTestsHelper startMockingBundleDictionary:nil];

Expand All @@ -83,8 +83,34 @@ - (void)testDefaultFontNameShouldBeEqualToSystemFontIfInfoBundleNotSet {
//Assert
XCTAssertEqualObjects(fontName, expectedFontName, @"Default base name should be %@", expectedFontName);

// Clean Up
//Clean Up
[SSTestsHelper stopMockingBundleDictionary];
}

- (void)testSetupDefaultFontDescriptiorBasedOnFontShouldBeEqualToInitialFontDescriptor {
//Arrange
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:SSTestFontName size:SSTestFontSize];
SSDynamicLabel *label = [SSDynamicLabel labelWithFontDescriptor:fontDescriptor];

//Act
[label setupDefaultFontDescriptorBasedOnFont:[UIFont fontWithDescriptor:fontDescriptor size:SSTestFontSize]];

//Assert
XCTAssertEqualObjects(label.defaultFontDescriptor, fontDescriptor,
@"Default font descriptor should have font %@ with size %f" , fontDescriptor.postscriptName, fontDescriptor.pointSize);
}

- (void)testSetupDefaultFontDescriptiorBasedOnNilFontShouldSetFontDescriptorWithDefaultValues {
//Arrange
UIView *testView = [[UIView alloc] init];
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:[testView ss_defaultFontName] size:[testView ss_defaultBaseSize]];

//Act
[testView setupDefaultFontDescriptorBasedOnFont:nil];

//Assert
XCTAssertEqualObjects(testView.defaultFontDescriptor, fontDescriptor,
@"Default font descriptor should have font %@ with size 16" , [UIFont systemFontOfSize:16.0].fontName);
}

@end
2 changes: 1 addition & 1 deletion SSDynamicText/SSDynamicButton.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// SSDynamicText
//
// Created by Adam Grzegorowski on 18/07/15.
//
// Copyright (c) 2015 Splinesoft. All rights reserved.
//

#import <UIKit/UIKit.h>
Expand Down
52 changes: 33 additions & 19 deletions SSDynamicText/SSDynamicButton.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// SSDynamicText
//
// Created by Adam Grzegorowski on 18/07/15.
//
// Copyright (c) 2015 Splinesoft. All rights reserved.
//

#import "SSDynamicButton.h"
Expand All @@ -15,8 +15,6 @@ @interface SSDynamicButton ()

@property (nonatomic, strong) NSMutableDictionary *baseAttributedTitlesDictionary;

- (void)setup;

@end

@implementation SSDynamicButton
Expand All @@ -39,7 +37,7 @@ - (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)
}

- (instancetype)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
if (self = [super initWithFrame:frame]) {
[self setup];
}

Expand All @@ -50,20 +48,7 @@ - (void)awakeFromNib {
[super awakeFromNib];

NSAssert(self.buttonType == UIButtonTypeCustom, @"Change SSDynamicButton.buttonType to UIButtonTypeCustom in your nib");
NSString *fontName;
CGFloat baseSize = 0;

if (self.titleLabel.font) {
fontName = self.titleLabel.font.fontName;
baseSize = self.titleLabel.font.pointSize;
}

fontName = (fontName ?: [self ss_defaultFontName]);
baseSize = (baseSize ?: [self ss_defaultBaseSize]);

self.defaultFontDescriptor = (self.titleLabel.font.fontDescriptor ?:
[UIFontDescriptor fontDescriptorWithName:fontName
size:baseSize]);
[self setupDefaultFontDescriptorBasedOnFont:self.titleLabel.font];

[self setup];
}
Expand All @@ -82,14 +67,18 @@ + (instancetype)buttonWithFontDescriptor:(UIFontDescriptor *)descriptor {

- (void)dealloc {
[self ss_stopObservingTextSizeChanges];
[self removeTitleLabelFontObserver];
}

- (void)changeFontWithDelta:(NSInteger)newDelta {
CGFloat preferredSize = [self.defaultFontDescriptor.fontAttributes[UIFontDescriptorSizeAttribute] floatValue];
preferredSize += newDelta;

[self removeTitleLabelFontObserver];
self.titleLabel.font = [UIFont fontWithDescriptor:self.defaultFontDescriptor
size:preferredSize];

[self addTitleLabelFontObserver];
}

- (void)changeAttributedTitle:(NSAttributedString *)attributedTitle forState:(UIControlState)state withFontSizeDelta:(NSInteger)newDelta {
Expand All @@ -98,13 +87,15 @@ - (void)changeAttributedTitle:(NSAttributedString *)attributedTitle forState:(UI

- (void)changeAttributedStringWithDelta:(NSInteger)newDelta {
[self.baseAttributedTitlesDictionary enumerateKeysAndObjectsUsingBlock:^(NSNumber *key, NSAttributedString *obj, BOOL *stop) {
[self changeAttributedTitle:obj forState:key.integerValue withFontSizeDelta:newDelta];
[self changeAttributedTitle:obj forState:key.unsignedIntegerValue withFontSizeDelta:newDelta];
}];
}

- (void)setup {
__weak typeof(self) weakSelf = self;

[self addTitleLabelFontObserver];

SSTextSizeChangedBlock changeHandler = ^(NSInteger newDelta) {

[weakSelf changeFontWithDelta:newDelta];
Expand All @@ -114,4 +105,27 @@ - (void)setup {
[self ss_startObservingTextSizeChangesWithBlock:changeHandler];
}

#pragma mark - Font observing

- (void)addTitleLabelFontObserver {
[self.titleLabel addObserver:self forKeyPath:NSStringFromSelector(@selector(font)) options:NSKeyValueObservingOptionNew context:NULL];
}

- (void)removeTitleLabelFontObserver {
[self.titleLabel removeObserver:self forKeyPath:NSStringFromSelector(@selector(font))];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
if ([keyPath isEqualToString:NSStringFromSelector(@selector(font))]) {

NSInteger newDelta = [UIApplication sharedApplication].preferredFontSizeDelta;
[self setupDefaultFontDescriptorBasedOnFont:self.titleLabel.font];

[self changeFontWithDelta:newDelta];
[self changeAttributedStringWithDelta:newDelta];
} else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}

@end
23 changes: 3 additions & 20 deletions SSDynamicText/SSDynamicLabel.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ - (void)setDefaultFontDescriptor:(UIFontDescriptor *)defaultFontDescriptor {

- (void)setFont:(UIFont *)font {
[super setFont:font];
[self setupBaseFontBasedOnCurrentFont];
[self setupDefaultFontDescriptorBasedOnFont:self.font];
}

- (instancetype)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
if (self = [super initWithFrame:frame]) {
[self startObservingTextSizeChanges];
}

Expand All @@ -46,7 +46,7 @@ - (instancetype)initWithFrame:(CGRect)frame {
- (void)awakeFromNib {
[super awakeFromNib];

[self setupBaseFontBasedOnCurrentFont];
[self setupDefaultFontDescriptorBasedOnFont:self.font];
[self startObservingTextSizeChanges];
}

Expand Down Expand Up @@ -83,23 +83,6 @@ - (SSDynamicTextSizeChanger *)createTextChanger {
return changer;
}

- (void)setupBaseFontBasedOnCurrentFont {
NSString *fontName;
CGFloat baseSize = 0;

if (self.font) {
fontName = self.font.fontName;
baseSize = self.font.pointSize;
}

fontName = (fontName ?: [self ss_defaultFontName]);
baseSize = (baseSize ?: [self ss_defaultBaseSize]);

self.defaultFontDescriptor = (self.font.fontDescriptor ?:
[UIFontDescriptor fontDescriptorWithName:fontName
size:baseSize]);
}

- (void)startObservingTextSizeChanges {
[self ss_startObservingTextSizeChangesWithBlock:self.textSizeChanger.changeHandler];
}
Expand Down
23 changes: 3 additions & 20 deletions SSDynamicText/SSDynamicTextField.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ - (void)setDefaultFontDescriptor:(UIFontDescriptor *)defaultFontDescriptor {

- (void)setFont:(UIFont *)font {
[super setFont:font];
[self setupBaseFontBasedOnCurrentFont];
[self setupDefaultFontDescriptorBasedOnFont:self.font];
}

- (instancetype)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
if (self = [super initWithFrame:frame]) {
[self startObservingTextSizeChanges];
}

Expand All @@ -46,7 +46,7 @@ - (instancetype)initWithFrame:(CGRect)frame {
- (void)awakeFromNib {
[super awakeFromNib];

[self setupBaseFontBasedOnCurrentFont];
[self setupDefaultFontDescriptorBasedOnFont:self.font];
[self startObservingTextSizeChanges];
}

Expand Down Expand Up @@ -83,23 +83,6 @@ - (SSDynamicTextSizeChanger *)createTextChanger {
return changer;
}

- (void)setupBaseFontBasedOnCurrentFont {
NSString *fontName;
CGFloat baseSize = 0;

if (self.font) {
fontName = self.font.fontName;
baseSize = self.font.pointSize;
}

fontName = (fontName ?: [self ss_defaultFontName]);
baseSize = (baseSize ?: [self ss_defaultBaseSize]);

self.defaultFontDescriptor = (self.font.fontDescriptor ?:
[UIFontDescriptor fontDescriptorWithName:fontName
size:baseSize]);
}

- (void)startObservingTextSizeChanges {
[self ss_startObservingTextSizeChangesWithBlock:self.textSizeChanger.changeHandler];
}
Expand Down
23 changes: 3 additions & 20 deletions SSDynamicText/SSDynamicTextView.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ - (void)setDefaultFontDescriptor:(UIFontDescriptor *)defaultFontDescriptor {

- (void)setFont:(UIFont *)font {
[super setFont:font];
[self setupBaseFontBasedOnCurrentFont];
[self setupDefaultFontDescriptorBasedOnFont:self.font];
}

- (instancetype)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
if (self = [super initWithFrame:frame]) {
[self startObservingTextSizeChanges];
}

Expand All @@ -46,7 +46,7 @@ - (instancetype)initWithFrame:(CGRect)frame {
- (void)awakeFromNib {
[super awakeFromNib];

[self setupBaseFontBasedOnCurrentFont];
[self setupDefaultFontDescriptorBasedOnFont:self.font];
[self startObservingTextSizeChanges];
}

Expand Down Expand Up @@ -83,23 +83,6 @@ - (SSDynamicTextSizeChanger *)createTextChanger {
return changer;
}

- (void)setupBaseFontBasedOnCurrentFont {
NSString *fontName;
CGFloat baseSize = 0;

if (self.font) {
fontName = self.font.fontName;
baseSize = self.font.pointSize;
}

fontName = (fontName ?: [self ss_defaultFontName]);
baseSize = (baseSize ?: [self ss_defaultBaseSize]);

self.defaultFontDescriptor = (self.font.fontDescriptor ?:
[UIFontDescriptor fontDescriptorWithName:fontName
size:baseSize]);
}

- (void)startObservingTextSizeChanges {
[self ss_startObservingTextSizeChangesWithBlock:self.textSizeChanger.changeHandler];
}
Expand Down
Loading