Skip to content

Commit 5118ec5

Browse files
committed
Merge pull request #29 from Grubas7/master
Add nullability and generics support
2 parents 635a2ed + 34e43a0 commit 5118ec5

25 files changed

Lines changed: 237 additions & 167 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
###### unreleased
55

66
- **(fixed)** Fixed `titleLabel` font upgrade for `SSDynamicButton` after font change, [#27](https://github.com/splinesoft/SSDynamicText/issues/8). _([Grubas7](https://github.com/Grubas7))_
7+
- **(modified)** Changed `ss_defaultFontName`, and `ss_defaultBaseSize` from methods to readonly properties. _([Grubas7](https://github.com/Grubas7))_
78

89
## 0.5.0
910
###### October 5, 2015

Example/SSDynamicTextTests/SSDynamicButtonTests.m

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,22 @@ - (void)tearDown {
3131
}
3232

3333
- (NSArray<SSDynamicButton *> *)dynamicButtonsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize {
34+
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize];
35+
36+
SSDynamicButton *dynamicButton = [[SSDynamicButton alloc] init];
37+
dynamicButton.defaultFontDescriptor = fontDescriptor;
38+
39+
SSDynamicButton *dynamicButtonWithFrame = [[SSDynamicButton alloc] initWithFrame:CGRectZero];
40+
dynamicButtonWithFrame.titleLabel.font = [UIFont fontWithName:fontName size:fontSize];
41+
3442
SSDynamicButton *dynamicButtonWithFont = [SSDynamicButton buttonWithFont:fontName baseSize:fontSize];
3543

36-
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize];
3744
SSDynamicButton *dynamicButtonWithFontDescriptor = [SSDynamicButton buttonWithFontDescriptor:fontDescriptor];
3845

3946
SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject;
4047
SSDynamicButton *dynamicButtonFromXib = view.button;
4148

42-
return @[ dynamicButtonWithFont, dynamicButtonWithFontDescriptor, dynamicButtonFromXib ];
49+
return @[ dynamicButton, dynamicButtonWithFrame, dynamicButtonWithFont, dynamicButtonWithFontDescriptor, dynamicButtonFromXib ];
4350
}
4451

4552
- (void)testButtonTitleLabelFontNameShouldBeEqualToFontNameFromConstructor {
@@ -102,7 +109,7 @@ - (void)testButtonTitleLabelFontSizeShouldBeEqualToNewFontSizeIncreasedByContent
102109
}
103110
}
104111

105-
- (void)testButtonTitleLabelAttributedTitleFontSizesShouldBeIncreasedByContentSizeCategoryDelta {
112+
- (void)testButtonTitleLabelAttributedTitleFontSizesShouldBeIncreasedByContentSizeCategoryDeltaAfterSetAttributedTitle {
106113
//Arrange
107114
NSAttributedString *attributedString = [SSAttributedStringValidator testAttributedString];
108115

@@ -115,7 +122,28 @@ - (void)testButtonTitleLabelAttributedTitleFontSizesShouldBeIncreasedByContentSi
115122
[button setAttributedTitle:attributedString forState:UIControlStateNormal];
116123

117124
//Assert
118-
XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:button.titleLabel.attributedText
125+
XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:[button attributedTitleForState:UIControlStateNormal]
126+
changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]);
127+
}
128+
}
129+
130+
- (void)testButtonTitleLabelAttributedTitleFontSizesShouldBeIncreasedByContentSizeCategoryDeltaAfterPostContentSizeChangeNotification {
131+
//Arrange
132+
NSAttributedString *attributedString = [SSAttributedStringValidator testAttributedString];
133+
134+
NSArray<SSDynamicButton *> *dynamicButtons = [self dynamicButtonsWithFontName:SSTestFontName fontSize:SSTestFontSize];
135+
136+
for (SSDynamicButton *button in dynamicButtons) {
137+
[button setAttributedTitle:attributedString forState:UIControlStateNormal];
138+
}
139+
140+
[SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge];
141+
//Act
142+
[SSTestsHelper postContentSizeChangeNotification];
143+
144+
for (SSDynamicButton *button in dynamicButtons) {
145+
//Assert
146+
XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:[button attributedTitleForState:UIControlStateNormal]
119147
changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]);
120148
}
121149
}

Example/SSDynamicTextTests/SSDynamicLabelTests.m

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,31 @@ - (void)tearDown {
3030
[super tearDown];
3131
}
3232

33-
- (NSArray *)dynamicLabelsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize {
33+
- (NSArray<SSDynamicLabel *> *)dynamicLabelsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize {
34+
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize];
35+
36+
SSDynamicLabel *dynamicLabel = [[SSDynamicLabel alloc] init];
37+
dynamicLabel.defaultFontDescriptor = fontDescriptor;
38+
39+
SSDynamicLabel *dynamicLabelWithFrame = [[SSDynamicLabel alloc] initWithFrame:CGRectZero];
40+
dynamicLabelWithFrame.font = [UIFont fontWithName:fontName size:fontSize];
41+
3442
SSDynamicLabel *dynamicLabelWithFont = [SSDynamicLabel labelWithFont:fontName baseSize:fontSize];
3543

36-
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize];
3744
SSDynamicLabel *dynamicLabelWithFontDescriptor = [SSDynamicLabel labelWithFontDescriptor:fontDescriptor];
3845

3946
SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject;
4047
SSDynamicLabel *dynamicLabelFromXib = view.label;
4148

42-
return @[ dynamicLabelWithFont, dynamicLabelWithFontDescriptor, dynamicLabelFromXib ];
49+
return @[ dynamicLabel, dynamicLabelWithFrame, dynamicLabelWithFont, dynamicLabelWithFontDescriptor, dynamicLabelFromXib ];
4350
}
4451

4552
- (void)testLabelFontNameShouldBeEqualToFontNameFromConstructor {
4653
//Arrange
4754
NSString *expectedFontName = SSTestFontName;
4855

4956
//Act
50-
NSArray *dynamicLabels = [self dynamicLabelsWithFontName:SSTestFontName fontSize:SSTestFontSize];
57+
NSArray<SSDynamicLabel *> *dynamicLabels = [self dynamicLabelsWithFontName:SSTestFontName fontSize:SSTestFontSize];
5158

5259
for (SSDynamicLabel *label in dynamicLabels) {
5360
//Assert

Example/SSDynamicTextTests/SSDynamicTextFieldTests.m

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,23 @@ - (void)tearDown {
3030
[super tearDown];
3131
}
3232

33-
- (NSArray *)dynamicTextFieldsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize {
33+
- (NSArray<SSDynamicTextField *> *)dynamicTextFieldsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize {
34+
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize];
35+
36+
SSDynamicTextField *dynamicTextField = [[SSDynamicTextField alloc] init];
37+
dynamicTextField.defaultFontDescriptor = fontDescriptor;
38+
39+
SSDynamicTextField *dynamicTextFieldWithFrame = [[SSDynamicTextField alloc] initWithFrame:CGRectZero];
40+
dynamicTextFieldWithFrame.font = [UIFont fontWithName:fontName size:fontSize];
41+
3442
SSDynamicTextField *dynamicTextFieldWithFont = [SSDynamicTextField textFieldWithFont:fontName baseSize:fontSize];
3543

36-
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize];
3744
SSDynamicTextField *dynamicTextFieldWithFontDescriptor = [SSDynamicTextField textFieldWithFontDescriptor:fontDescriptor];
3845

3946
SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject;
4047
SSDynamicTextField *dynamicTextFieldFromXib = view.textField;
4148

42-
return @[ dynamicTextFieldWithFont, dynamicTextFieldWithFontDescriptor, dynamicTextFieldFromXib ];
49+
return @[ dynamicTextField, dynamicTextFieldWithFrame, dynamicTextFieldWithFont, dynamicTextFieldWithFontDescriptor, dynamicTextFieldFromXib ];
4350
}
4451

4552
- (void)testTextFieldFontNameShouldBeEqualToFontNameFromConstructor {
@@ -89,7 +96,7 @@ - (void)testLabelFontSizeShouldBeEqualToNewFontSizeIncreasedByContentSizeCategor
8996
CGFloat newFontSize = 7.0f;
9097
UIFont *newFont = [UIFont systemFontOfSize:newFontSize];
9198

92-
NSArray *dynamicTextField = [self dynamicTextFieldsWithFontName:SSTestFontName fontSize:SSTestFontSize];
99+
NSArray<SSDynamicTextField *> *dynamicTextField = [self dynamicTextFieldsWithFontName:SSTestFontName fontSize:SSTestFontSize];
93100

94101
[SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge];
95102

Example/SSDynamicTextTests/SSDynamicTextViewTests.m

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,24 @@ - (void)tearDown {
3030
[super tearDown];
3131
}
3232

33-
- (NSArray *)dynamicTextViewsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize {
34-
SSDynamicTextView *dynamicTextViewWithFont = [SSDynamicTextView textViewWithFont:fontName baseSize:fontSize];
33+
- (NSArray<SSDynamicsView *> *)dynamicTextViewsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize {
3534

3635
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize];
36+
37+
SSDynamicTextView *dynamicTextView = [[SSDynamicTextView alloc] init];
38+
dynamicTextView.defaultFontDescriptor = fontDescriptor;
39+
40+
SSDynamicTextView *dynamicTextViewWithFrame = [[SSDynamicTextView alloc] initWithFrame:CGRectZero];
41+
dynamicTextViewWithFrame.font = [UIFont fontWithName:fontName size:fontSize];
42+
43+
SSDynamicTextView *dynamicTextViewWithFont = [SSDynamicTextView textViewWithFont:fontName baseSize:fontSize];
44+
3745
SSDynamicTextView *dynamicTextViewWithFontDescriptor = [SSDynamicTextView textViewWithFontDescriptor:fontDescriptor];
3846

3947
SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject;
4048
SSDynamicTextView *dynamicTextViewFromXib = view.textView;
4149

42-
return @[ dynamicTextViewWithFont, dynamicTextViewWithFontDescriptor, dynamicTextViewFromXib ];
50+
return @[ dynamicTextView, dynamicTextViewWithFrame, dynamicTextViewWithFont, dynamicTextViewWithFontDescriptor, dynamicTextViewFromXib ];
4351
}
4452

4553
- (void)testTextViewFontNameShouldBeEqualToFontNameFromConstructor {
@@ -89,7 +97,7 @@ - (void)testTextViewFontSizeShouldBeEqualToNewFontSizeIncreasedByContentSizeCate
8997
CGFloat newFontSize = 7.0f;
9098
UIFont *newFont = [UIFont systemFontOfSize:newFontSize];
9199

92-
NSArray *dynamicTextViews = [self dynamicTextViewsWithFontName:SSTestFontName fontSize:SSTestFontSize];
100+
NSArray<SSDynamicTextView *> *dynamicTextViews = [self dynamicTextViewsWithFontName:SSTestFontName fontSize:SSTestFontSize];
93101

94102
[SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge];
95103

Example/SSDynamicTextTests/UIFont+SSTextSizeTests.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ @implementation UIFont_SSTextSizeTests
2121
- (void)testDynamicFontWithNameBaseSizeShouldReturnFontWithSizeIncreasedOfPreferredFontSizeDelta {
2222

2323
//Arrange
24-
NSArray *contentSizeCategories = @[
24+
NSArray<NSString *> *contentSizeCategories = @[
2525
UIContentSizeCategoryExtraSmall,
2626
UIContentSizeCategorySmall,
2727
UIContentSizeCategoryMedium,

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ What's not so neat, though, is that `+[UIFont preferredFontForTextStyle:]` only
99

1010
SSDynamicText is a collection of simple `UILabel`, `UIButton`, `UITextField`, and `UITextView` subclasses inspired by [this](http://stackoverflow.com/questions/18758227/ios7-can-we-use-other-than-helvetica-neue-fonts-with-dynamic-type/19024944#19024944) SO answer.
1111

12+
## Requirements
13+
14+
Xcode 7.0+ with iOS 7.0+ SDK.
15+
1216
## Install
1317

1418
Install with [CocoaPods](http://cocoapods.org). Add to your `Podfile`:

SSDynamicText.podspec

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
Pod::Spec.new do |s|
2-
s.name = "SSDynamicText"
3-
s.version = "0.5.0"
4-
s.summary = "UILabel/TextField/TextView subclasses that support custom fonts with iOS 7's dynamic text sizes."
5-
s.homepage = "https://github.com/splinesoft/SSDynamicText"
6-
s.license = { :type => 'MIT', :file => 'LICENSE' }
7-
s.author = { "Jonathan Hersh" => "jon@her.sh" }
8-
s.source = { :git => "https://github.com/splinesoft/SSDynamicText.git", :tag => s.version.to_s }
9-
s.platform = :ios, '7.0'
10-
s.requires_arc = true
11-
s.source_files = 'SSDynamicText/*.{h,m}'
12-
s.frameworks = 'UIKit'
2+
s.name = "SSDynamicText"
3+
s.version = "0.5.0"
4+
s.summary = "UILabel/UIButton/UITextField/UITextView subclasses that support custom fonts with iOS 7's dynamic text sizes."
5+
s.homepage = "https://github.com/splinesoft/SSDynamicText"
6+
s.license = { :type => 'MIT', :file => 'LICENSE' }
7+
s.author = { "Jonathan Hersh" => "jon@her.sh" }
8+
s.source = { :git => "https://github.com/splinesoft/SSDynamicText.git", :tag => s.version.to_s }
9+
s.platform = :ios, '7.0'
10+
s.requires_arc = true
11+
s.compiler_flags = "-fmodules"
12+
s.source_files = 'SSDynamicText/*.{h,m}'
13+
s.frameworks = 'UIKit'
1314
s.ios.deployment_target = '7.0'
1415
s.social_media_url = 'https://twitter.com/jhersh'
1516
end

SSDynamicText/NSAttributedString+SSTextSize.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
// SSDynamicText
44
//
55
// Created by Remigiusz Herba on 28/08/15.
6-
//
6+
// Copyright (c) 2015 Splinesoft. All rights reserved.
77
//
88

9-
#import <Foundation/Foundation.h>
9+
@import Foundation;
1010

1111
@interface NSAttributedString (SSTextSize)
1212

@@ -17,6 +17,6 @@
1717
* A positive number will increase font size.
1818
* @return new NSAttributedString object with font size changed by delta.
1919
*/
20-
- (NSAttributedString *)ss_attributedStringWithAdjustedFontSizeWithDelta:(NSInteger)delta;
20+
- (nonnull NSAttributedString *)ss_attributedStringWithAdjustedFontSizeWithDelta:(NSInteger)delta;
2121

2222
@end

SSDynamicText/NSAttributedString+SSTextSize.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// SSDynamicText
44
//
55
// Created by Remigiusz Herba on 28/08/15.
6-
//
6+
// Copyright (c) 2015 Splinesoft. All rights reserved.
77
//
88

99
#import "NSAttributedString+SSTextSize.h"

0 commit comments

Comments
 (0)