具有静态TableView单元的IOS 8动态类型 - 基本和字幕

时间:2014-10-11 11:28:41

标签: ios objective-c uitableview

在设置中更改文本大小并返回应用程序后,将显示“基本”和“字幕”类型的静态单元格,并保持空白,直到您离开视图或重新加载应用程序。自定义静态单元格保留其文本。

易于复制。

创建单个视图应用程序,用UiTableViewController替换UIViewController。 将内容从动态单元格更改为静态单元格。

设置样式单元格0 =自定义,单元格1 =基本,单元格2 =字幕

连接所有

的属性
@property (weak, nonatomic) IBOutlet UILabel *customCell;
@property (weak, nonatomic) IBOutlet UILabel *basicCell;
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UILabel *subTitleLabel;

将以下内容添加到viewDidLoad

NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self selector:@selector(updateInterfaceForDynamicTypeSize)      name:UIContentSizeCategoryDidChangeNotification object:nil];


self.customCell.text = @"Custom Cell";
self.basicCell.text = @"Basic Cell";
self.titleLabel.text = @"My Title";
self.subTitleLabel.text = @"My Sub Title";

添加以下方法

-(void)updateInterfaceForDynamicTypeSize {
UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
self.customCell.font = font;
self.basicCell.font = font;
self.titleLabel.font = font;
font = [UIFont preferredFontForTextStyle:UIFontTextStyleFootnote];
self.subTitleLabel.font = font;
[self.tableView reloadData];
}

运行应用程序 - 然后转到“设置”并更改文本大小。 返回应用程序,仅显示自定义单元格内容。

IOS 7的情况并非如此。我在这里遗漏了什么或这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

在故事板中配置您的单元格以使用自定义类而不是默认UITableViewCell

简单的自定义单元格实现如下:

// DynamicTypeResistantCell.h
#import <UIKit/UIKit.h>
@interface DynamicTypeResistantCell : UITableViewCell

@end


// DynamicTypeResistantCell.m
@implementation DynamicTypeResistantCell
- (void)_systemTextSizeChanged
{
    // don't call super!
}
@end

然后,您可以安全地使用Basic和Subtitle样式,并在动态类型大小更改后保留其内容。