├── README.md ├── UITableViewCellHeightDemo ├── image.jpg ├── ListModel.m ├── BaseViewController.h ├── ListViewController.h ├── ListModel.h ├── PrefixHeader.pch ├── AppDelegate.h ├── ListTableViewCell.h ├── main.m ├── AppDelegate.m ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── ListTableViewCell.m ├── Info.plist ├── BaseViewController.m ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── ListViewController.m └── ListTableViewCell.xib ├── UITableViewCellHeightDemo.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── project.pbxproj ├── LICENSE └── .gitignore /README.md: -------------------------------------------------------------------------------- 1 | # UITableViewCellHeightDemo 2 | UITableView自动计算高度并缓存 3 | 4 | 讲解详见[这篇文章](http://www.jianshu.com/p/64f0e1557562) 5 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lisongrc/UITableViewCellHeightDemo/HEAD/UITableViewCellHeightDemo/image.jpg -------------------------------------------------------------------------------- /UITableViewCellHeightDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/ListModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // ListModel.m 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import "ListModel.h" 10 | 11 | @implementation ListModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/BaseViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BaseViewController.h 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BaseViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/ListViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ListViewController.h 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import "BaseViewController.h" 10 | 11 | @interface ListViewController : BaseViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/ListModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // ListModel.h 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ListModel : NSObject 12 | 13 | @property (nonatomic, copy) NSString *desc; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/PrefixHeader.pch: -------------------------------------------------------------------------------- 1 | // 2 | // PrefixHeader.pch 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #ifndef PrefixHeader_pch 10 | #define PrefixHeader_pch 11 | 12 | #import "BaseViewController.h" 13 | 14 | #endif /* PrefixHeader_pch */ 15 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/ListTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // ListTableViewCell.h 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "ListModel.h" 11 | 12 | @interface ListTableViewCell : UITableViewCell 13 | 14 | @property (nonatomic, strong) ListModel *model; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 19 | { 20 | return YES; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/ListTableViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // ListTableViewCell.m 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import "ListTableViewCell.h" 10 | 11 | @interface ListTableViewCell () 12 | 13 | @property (weak, nonatomic) IBOutlet UIImageView *iconImageView; 14 | @property (weak, nonatomic) IBOutlet UILabel *desclabel; 15 | 16 | @end 17 | 18 | @implementation ListTableViewCell 19 | 20 | - (void)awakeFromNib 21 | { 22 | [super awakeFromNib]; 23 | } 24 | 25 | - (void)setModel:(ListModel *)model 26 | { 27 | _model = model; 28 | 29 | self.iconImageView.image = [UIImage imageNamed:@"image.jpg"]; 30 | self.desclabel.text = model.desc; 31 | } 32 | 33 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated 34 | { 35 | [super setSelected:selected animated:animated]; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 lisong 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | # CocoaPods 31 | # 32 | # We recommend against adding the Pods directory to your .gitignore. However 33 | # you should judge for yourself, the pros and cons are mentioned at: 34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 35 | # 36 | # Pods/ 37 | 38 | # Carthage 39 | # 40 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 41 | # Carthage/Checkouts 42 | 43 | Carthage/Build 44 | 45 | # fastlane 46 | # 47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 48 | # screenshots whenever they are needed. 49 | # For more information about the recommended setup visit: 50 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 51 | 52 | fastlane/report.xml 53 | fastlane/screenshots 54 | 55 | #Code Injection 56 | # 57 | # After new code Injection tools there's a generated folder /iOSInjectionProject 58 | # https://github.com/johnno1962/injectionforxcode 59 | 60 | iOSInjectionProject/ 61 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/BaseViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BaseViewController.m 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import "BaseViewController.h" 10 | 11 | @interface BaseViewController () 12 | 13 | @property (nonatomic, strong) NSMutableDictionary *heightAtIndexPath;//缓存高度 14 | 15 | @end 16 | 17 | @implementation BaseViewController 18 | 19 | - (void)viewDidLoad 20 | { 21 | [super viewDidLoad]; 22 | } 23 | 24 | #pragma mark - UITableViewDelegate 25 | - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 26 | { 27 | NSNumber *height = [self.heightAtIndexPath objectForKey:indexPath]; 28 | if(height) 29 | { 30 | return height.floatValue; 31 | } 32 | else 33 | { 34 | return 100; 35 | } 36 | } 37 | 38 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 39 | { 40 | return UITableViewAutomaticDimension; 41 | } 42 | 43 | - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 44 | { 45 | NSNumber *height = @(cell.frame.size.height); 46 | [self.heightAtIndexPath setObject:height forKey:indexPath]; 47 | } 48 | 49 | #pragma mark - Getters 50 | - (NSMutableDictionary *)heightAtIndexPath 51 | { 52 | if (!_heightAtIndexPath) { 53 | _heightAtIndexPath = [NSMutableDictionary dictionary]; 54 | } 55 | return _heightAtIndexPath; 56 | } 57 | 58 | - (void)didReceiveMemoryWarning 59 | { 60 | [super didReceiveMemoryWarning]; 61 | } 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/ListViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ListViewController.m 3 | // UITableViewCellHeightDemo 4 | // 5 | // Created by lisong on 2016/10/8. 6 | // Copyright © 2016年 lisong. All rights reserved. 7 | // 8 | 9 | #import "ListViewController.h" 10 | #import "ListTableViewCell.h" 11 | 12 | static NSString * const ReuseIdentifier = @"cell"; 13 | 14 | @interface ListViewController () 15 | 16 | @property (weak, nonatomic) IBOutlet UITableView *tableView; 17 | 18 | @property (nonatomic, strong) NSMutableArray *dataArray; 19 | 20 | @end 21 | 22 | @implementation ListViewController 23 | 24 | - (void)viewDidLoad 25 | { 26 | [super viewDidLoad]; 27 | 28 | self.navigationItem.title = @"标题"; 29 | 30 | self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"reloaData" style:UIBarButtonItemStylePlain target:self action:@selector(rightBarButtonItemDidClick:)]; 31 | 32 | [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([ListTableViewCell class]) bundle:nil] forCellReuseIdentifier:ReuseIdentifier]; 33 | } 34 | 35 | #pragma mark - UITableViewDelegate 36 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 37 | { 38 | return self.dataArray.count; 39 | } 40 | 41 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 42 | { 43 | ListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReuseIdentifier forIndexPath:indexPath]; 44 | cell.model = self.dataArray[indexPath.row]; 45 | return cell; 46 | } 47 | 48 | #pragma mark - Methods 49 | - (void)rightBarButtonItemDidClick:(UIBarButtonItem *)item 50 | { 51 | [self.tableView reloadData]; 52 | } 53 | 54 | #pragma mark - Getters 55 | - (NSMutableArray *)dataArray 56 | { 57 | if (!_dataArray) 58 | { 59 | _dataArray = [NSMutableArray array]; 60 | 61 | NSString *string = @"Siri 让你能够利用语音来完成发送信息、安排会议、查看最新比分等更多事务。只要说出你想做的事,Siri 就能帮你办到。Siri 可以听懂你说的话、知晓你的心意,甚至还能有所回应。iOS 7 中的 Siri 拥有新外观、新声音和新功能。它的界面经过重新设计,以淡入视图浮现于任意屏幕画面的最上层。Siri 回答问题的速度更快,还能查询更多信息源,如维基百科。它可以承担更多任务,如回电话、播放语音邮件、调节屏幕亮度,以及更多。"; 62 | 63 | //生成假数据 64 | for (int i = 0; i < 100; i++) 65 | { 66 | ListModel *model = [[ListModel alloc] init]; 67 | NSInteger index = (arc4random()%(string.length / 20)) * 20; 68 | model.desc = [string substringToIndex:MAX(20, index)]; 69 | 70 | [_dataArray addObject:model]; 71 | } 72 | } 73 | return _dataArray; 74 | } 75 | 76 | - (void)didReceiveMemoryWarning 77 | { 78 | [super didReceiveMemoryWarning]; 79 | } 80 | 81 | @end 82 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/ListTableViewCell.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /UITableViewCellHeightDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 99F12AEA1DA8E55D00E3A1AC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F12AE91DA8E55D00E3A1AC /* main.m */; }; 11 | 99F12AED1DA8E55D00E3A1AC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F12AEC1DA8E55D00E3A1AC /* AppDelegate.m */; }; 12 | 99F12AF31DA8E55D00E3A1AC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 99F12AF11DA8E55D00E3A1AC /* Main.storyboard */; }; 13 | 99F12AF51DA8E55D00E3A1AC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 99F12AF41DA8E55D00E3A1AC /* Assets.xcassets */; }; 14 | 99F12AF81DA8E55D00E3A1AC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 99F12AF61DA8E55D00E3A1AC /* LaunchScreen.storyboard */; }; 15 | 99F12B011DA8E60400E3A1AC /* BaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F12B001DA8E60400E3A1AC /* BaseViewController.m */; }; 16 | 99F12B061DA8EA1B00E3A1AC /* ListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F12B041DA8EA1B00E3A1AC /* ListTableViewCell.m */; }; 17 | 99F12B071DA8EA1B00E3A1AC /* ListTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 99F12B051DA8EA1B00E3A1AC /* ListTableViewCell.xib */; }; 18 | 99F12B0A1DA8EA4000E3A1AC /* ListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F12B091DA8EA4000E3A1AC /* ListViewController.m */; }; 19 | 99F12B0F1DA8EB0E00E3A1AC /* ListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F12B0E1DA8EB0E00E3A1AC /* ListModel.m */; }; 20 | 99F12B111DA8EE2800E3A1AC /* image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 99F12B101DA8EE2800E3A1AC /* image.jpg */; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXFileReference section */ 24 | 99F12AE51DA8E55D00E3A1AC /* UITableViewCellHeightDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = UITableViewCellHeightDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 25 | 99F12AE91DA8E55D00E3A1AC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 26 | 99F12AEB1DA8E55D00E3A1AC /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 27 | 99F12AEC1DA8E55D00E3A1AC /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 28 | 99F12AF21DA8E55D00E3A1AC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 29 | 99F12AF41DA8E55D00E3A1AC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 30 | 99F12AF71DA8E55D00E3A1AC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 31 | 99F12AFF1DA8E60400E3A1AC /* BaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseViewController.h; sourceTree = ""; }; 32 | 99F12B001DA8E60400E3A1AC /* BaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseViewController.m; sourceTree = ""; }; 33 | 99F12B021DA8E66100E3A1AC /* PrefixHeader.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = ""; }; 34 | 99F12B031DA8EA1B00E3A1AC /* ListTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListTableViewCell.h; sourceTree = ""; }; 35 | 99F12B041DA8EA1B00E3A1AC /* ListTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListTableViewCell.m; sourceTree = ""; }; 36 | 99F12B051DA8EA1B00E3A1AC /* ListTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ListTableViewCell.xib; sourceTree = ""; }; 37 | 99F12B081DA8EA4000E3A1AC /* ListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListViewController.h; sourceTree = ""; }; 38 | 99F12B091DA8EA4000E3A1AC /* ListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListViewController.m; sourceTree = ""; }; 39 | 99F12B0D1DA8EB0E00E3A1AC /* ListModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListModel.h; sourceTree = ""; }; 40 | 99F12B0E1DA8EB0E00E3A1AC /* ListModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListModel.m; sourceTree = ""; }; 41 | 99F12B101DA8EE2800E3A1AC /* image.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = image.jpg; sourceTree = ""; }; 42 | /* End PBXFileReference section */ 43 | 44 | /* Begin PBXFrameworksBuildPhase section */ 45 | 99F12AE21DA8E55D00E3A1AC /* Frameworks */ = { 46 | isa = PBXFrameworksBuildPhase; 47 | buildActionMask = 2147483647; 48 | files = ( 49 | ); 50 | runOnlyForDeploymentPostprocessing = 0; 51 | }; 52 | /* End PBXFrameworksBuildPhase section */ 53 | 54 | /* Begin PBXGroup section */ 55 | 99F12ADC1DA8E55D00E3A1AC = { 56 | isa = PBXGroup; 57 | children = ( 58 | 99F12AE71DA8E55D00E3A1AC /* UITableViewCellHeightDemo */, 59 | 99F12AE61DA8E55D00E3A1AC /* Products */, 60 | ); 61 | sourceTree = ""; 62 | }; 63 | 99F12AE61DA8E55D00E3A1AC /* Products */ = { 64 | isa = PBXGroup; 65 | children = ( 66 | 99F12AE51DA8E55D00E3A1AC /* UITableViewCellHeightDemo.app */, 67 | ); 68 | name = Products; 69 | sourceTree = ""; 70 | }; 71 | 99F12AE71DA8E55D00E3A1AC /* UITableViewCellHeightDemo */ = { 72 | isa = PBXGroup; 73 | children = ( 74 | 99F12AEB1DA8E55D00E3A1AC /* AppDelegate.h */, 75 | 99F12AEC1DA8E55D00E3A1AC /* AppDelegate.m */, 76 | 99F12AFF1DA8E60400E3A1AC /* BaseViewController.h */, 77 | 99F12B001DA8E60400E3A1AC /* BaseViewController.m */, 78 | 99F12B081DA8EA4000E3A1AC /* ListViewController.h */, 79 | 99F12B091DA8EA4000E3A1AC /* ListViewController.m */, 80 | 99F12B031DA8EA1B00E3A1AC /* ListTableViewCell.h */, 81 | 99F12B041DA8EA1B00E3A1AC /* ListTableViewCell.m */, 82 | 99F12B051DA8EA1B00E3A1AC /* ListTableViewCell.xib */, 83 | 99F12B0D1DA8EB0E00E3A1AC /* ListModel.h */, 84 | 99F12B0E1DA8EB0E00E3A1AC /* ListModel.m */, 85 | 99F12B101DA8EE2800E3A1AC /* image.jpg */, 86 | 99F12AF11DA8E55D00E3A1AC /* Main.storyboard */, 87 | 99F12AF41DA8E55D00E3A1AC /* Assets.xcassets */, 88 | 99F12B021DA8E66100E3A1AC /* PrefixHeader.pch */, 89 | 99F12AE81DA8E55D00E3A1AC /* Supporting Files */, 90 | ); 91 | path = UITableViewCellHeightDemo; 92 | sourceTree = ""; 93 | }; 94 | 99F12AE81DA8E55D00E3A1AC /* Supporting Files */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 99F12AF61DA8E55D00E3A1AC /* LaunchScreen.storyboard */, 98 | 99F12AE91DA8E55D00E3A1AC /* main.m */, 99 | ); 100 | name = "Supporting Files"; 101 | sourceTree = ""; 102 | }; 103 | /* End PBXGroup section */ 104 | 105 | /* Begin PBXNativeTarget section */ 106 | 99F12AE41DA8E55D00E3A1AC /* UITableViewCellHeightDemo */ = { 107 | isa = PBXNativeTarget; 108 | buildConfigurationList = 99F12AFC1DA8E55D00E3A1AC /* Build configuration list for PBXNativeTarget "UITableViewCellHeightDemo" */; 109 | buildPhases = ( 110 | 99F12AE11DA8E55D00E3A1AC /* Sources */, 111 | 99F12AE21DA8E55D00E3A1AC /* Frameworks */, 112 | 99F12AE31DA8E55D00E3A1AC /* Resources */, 113 | ); 114 | buildRules = ( 115 | ); 116 | dependencies = ( 117 | ); 118 | name = UITableViewCellHeightDemo; 119 | productName = UITableViewCellHeightDemo; 120 | productReference = 99F12AE51DA8E55D00E3A1AC /* UITableViewCellHeightDemo.app */; 121 | productType = "com.apple.product-type.application"; 122 | }; 123 | /* End PBXNativeTarget section */ 124 | 125 | /* Begin PBXProject section */ 126 | 99F12ADD1DA8E55D00E3A1AC /* Project object */ = { 127 | isa = PBXProject; 128 | attributes = { 129 | LastUpgradeCheck = 0800; 130 | ORGANIZATIONNAME = lisong; 131 | TargetAttributes = { 132 | 99F12AE41DA8E55D00E3A1AC = { 133 | CreatedOnToolsVersion = 8.0; 134 | ProvisioningStyle = Automatic; 135 | }; 136 | }; 137 | }; 138 | buildConfigurationList = 99F12AE01DA8E55D00E3A1AC /* Build configuration list for PBXProject "UITableViewCellHeightDemo" */; 139 | compatibilityVersion = "Xcode 3.2"; 140 | developmentRegion = English; 141 | hasScannedForEncodings = 0; 142 | knownRegions = ( 143 | en, 144 | Base, 145 | ); 146 | mainGroup = 99F12ADC1DA8E55D00E3A1AC; 147 | productRefGroup = 99F12AE61DA8E55D00E3A1AC /* Products */; 148 | projectDirPath = ""; 149 | projectRoot = ""; 150 | targets = ( 151 | 99F12AE41DA8E55D00E3A1AC /* UITableViewCellHeightDemo */, 152 | ); 153 | }; 154 | /* End PBXProject section */ 155 | 156 | /* Begin PBXResourcesBuildPhase section */ 157 | 99F12AE31DA8E55D00E3A1AC /* Resources */ = { 158 | isa = PBXResourcesBuildPhase; 159 | buildActionMask = 2147483647; 160 | files = ( 161 | 99F12AF81DA8E55D00E3A1AC /* LaunchScreen.storyboard in Resources */, 162 | 99F12B071DA8EA1B00E3A1AC /* ListTableViewCell.xib in Resources */, 163 | 99F12AF51DA8E55D00E3A1AC /* Assets.xcassets in Resources */, 164 | 99F12AF31DA8E55D00E3A1AC /* Main.storyboard in Resources */, 165 | 99F12B111DA8EE2800E3A1AC /* image.jpg in Resources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXResourcesBuildPhase section */ 170 | 171 | /* Begin PBXSourcesBuildPhase section */ 172 | 99F12AE11DA8E55D00E3A1AC /* Sources */ = { 173 | isa = PBXSourcesBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | 99F12B0A1DA8EA4000E3A1AC /* ListViewController.m in Sources */, 177 | 99F12B011DA8E60400E3A1AC /* BaseViewController.m in Sources */, 178 | 99F12AED1DA8E55D00E3A1AC /* AppDelegate.m in Sources */, 179 | 99F12B0F1DA8EB0E00E3A1AC /* ListModel.m in Sources */, 180 | 99F12AEA1DA8E55D00E3A1AC /* main.m in Sources */, 181 | 99F12B061DA8EA1B00E3A1AC /* ListTableViewCell.m in Sources */, 182 | ); 183 | runOnlyForDeploymentPostprocessing = 0; 184 | }; 185 | /* End PBXSourcesBuildPhase section */ 186 | 187 | /* Begin PBXVariantGroup section */ 188 | 99F12AF11DA8E55D00E3A1AC /* Main.storyboard */ = { 189 | isa = PBXVariantGroup; 190 | children = ( 191 | 99F12AF21DA8E55D00E3A1AC /* Base */, 192 | ); 193 | name = Main.storyboard; 194 | sourceTree = ""; 195 | }; 196 | 99F12AF61DA8E55D00E3A1AC /* LaunchScreen.storyboard */ = { 197 | isa = PBXVariantGroup; 198 | children = ( 199 | 99F12AF71DA8E55D00E3A1AC /* Base */, 200 | ); 201 | name = LaunchScreen.storyboard; 202 | sourceTree = ""; 203 | }; 204 | /* End PBXVariantGroup section */ 205 | 206 | /* Begin XCBuildConfiguration section */ 207 | 99F12AFA1DA8E55D00E3A1AC /* Debug */ = { 208 | isa = XCBuildConfiguration; 209 | buildSettings = { 210 | ALWAYS_SEARCH_USER_PATHS = NO; 211 | CLANG_ANALYZER_NONNULL = YES; 212 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 213 | CLANG_CXX_LIBRARY = "libc++"; 214 | CLANG_ENABLE_MODULES = YES; 215 | CLANG_ENABLE_OBJC_ARC = YES; 216 | CLANG_WARN_BOOL_CONVERSION = YES; 217 | CLANG_WARN_CONSTANT_CONVERSION = YES; 218 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 219 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 220 | CLANG_WARN_EMPTY_BODY = YES; 221 | CLANG_WARN_ENUM_CONVERSION = YES; 222 | CLANG_WARN_INFINITE_RECURSION = YES; 223 | CLANG_WARN_INT_CONVERSION = YES; 224 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 225 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 226 | CLANG_WARN_UNREACHABLE_CODE = YES; 227 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 228 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 229 | COPY_PHASE_STRIP = NO; 230 | DEBUG_INFORMATION_FORMAT = dwarf; 231 | ENABLE_STRICT_OBJC_MSGSEND = YES; 232 | ENABLE_TESTABILITY = YES; 233 | GCC_C_LANGUAGE_STANDARD = gnu99; 234 | GCC_DYNAMIC_NO_PIC = NO; 235 | GCC_NO_COMMON_BLOCKS = YES; 236 | GCC_OPTIMIZATION_LEVEL = 0; 237 | GCC_PREPROCESSOR_DEFINITIONS = ( 238 | "DEBUG=1", 239 | "$(inherited)", 240 | ); 241 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 242 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 243 | GCC_WARN_UNDECLARED_SELECTOR = YES; 244 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 245 | GCC_WARN_UNUSED_FUNCTION = YES; 246 | GCC_WARN_UNUSED_VARIABLE = YES; 247 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 248 | MTL_ENABLE_DEBUG_INFO = YES; 249 | ONLY_ACTIVE_ARCH = YES; 250 | SDKROOT = iphoneos; 251 | }; 252 | name = Debug; 253 | }; 254 | 99F12AFB1DA8E55D00E3A1AC /* Release */ = { 255 | isa = XCBuildConfiguration; 256 | buildSettings = { 257 | ALWAYS_SEARCH_USER_PATHS = NO; 258 | CLANG_ANALYZER_NONNULL = YES; 259 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 260 | CLANG_CXX_LIBRARY = "libc++"; 261 | CLANG_ENABLE_MODULES = YES; 262 | CLANG_ENABLE_OBJC_ARC = YES; 263 | CLANG_WARN_BOOL_CONVERSION = YES; 264 | CLANG_WARN_CONSTANT_CONVERSION = YES; 265 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 266 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 267 | CLANG_WARN_EMPTY_BODY = YES; 268 | CLANG_WARN_ENUM_CONVERSION = YES; 269 | CLANG_WARN_INFINITE_RECURSION = YES; 270 | CLANG_WARN_INT_CONVERSION = YES; 271 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 272 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 273 | CLANG_WARN_UNREACHABLE_CODE = YES; 274 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 275 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 276 | COPY_PHASE_STRIP = NO; 277 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 278 | ENABLE_NS_ASSERTIONS = NO; 279 | ENABLE_STRICT_OBJC_MSGSEND = YES; 280 | GCC_C_LANGUAGE_STANDARD = gnu99; 281 | GCC_NO_COMMON_BLOCKS = YES; 282 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 283 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 284 | GCC_WARN_UNDECLARED_SELECTOR = YES; 285 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 286 | GCC_WARN_UNUSED_FUNCTION = YES; 287 | GCC_WARN_UNUSED_VARIABLE = YES; 288 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 289 | MTL_ENABLE_DEBUG_INFO = NO; 290 | SDKROOT = iphoneos; 291 | VALIDATE_PRODUCT = YES; 292 | }; 293 | name = Release; 294 | }; 295 | 99F12AFD1DA8E55D00E3A1AC /* Debug */ = { 296 | isa = XCBuildConfiguration; 297 | buildSettings = { 298 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 299 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 300 | GCC_PREFIX_HEADER = "$(SRCROOT)/UITableViewCellHeightDemo/PrefixHeader.pch"; 301 | INFOPLIST_FILE = UITableViewCellHeightDemo/Info.plist; 302 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 303 | PRODUCT_BUNDLE_IDENTIFIER = com.lisong.UITableViewCellHeightDemo; 304 | PRODUCT_NAME = "$(TARGET_NAME)"; 305 | }; 306 | name = Debug; 307 | }; 308 | 99F12AFE1DA8E55D00E3A1AC /* Release */ = { 309 | isa = XCBuildConfiguration; 310 | buildSettings = { 311 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 312 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 313 | GCC_PREFIX_HEADER = "$(SRCROOT)/UITableViewCellHeightDemo/PrefixHeader.pch"; 314 | INFOPLIST_FILE = UITableViewCellHeightDemo/Info.plist; 315 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 316 | PRODUCT_BUNDLE_IDENTIFIER = com.lisong.UITableViewCellHeightDemo; 317 | PRODUCT_NAME = "$(TARGET_NAME)"; 318 | }; 319 | name = Release; 320 | }; 321 | /* End XCBuildConfiguration section */ 322 | 323 | /* Begin XCConfigurationList section */ 324 | 99F12AE01DA8E55D00E3A1AC /* Build configuration list for PBXProject "UITableViewCellHeightDemo" */ = { 325 | isa = XCConfigurationList; 326 | buildConfigurations = ( 327 | 99F12AFA1DA8E55D00E3A1AC /* Debug */, 328 | 99F12AFB1DA8E55D00E3A1AC /* Release */, 329 | ); 330 | defaultConfigurationIsVisible = 0; 331 | defaultConfigurationName = Release; 332 | }; 333 | 99F12AFC1DA8E55D00E3A1AC /* Build configuration list for PBXNativeTarget "UITableViewCellHeightDemo" */ = { 334 | isa = XCConfigurationList; 335 | buildConfigurations = ( 336 | 99F12AFD1DA8E55D00E3A1AC /* Debug */, 337 | 99F12AFE1DA8E55D00E3A1AC /* Release */, 338 | ); 339 | defaultConfigurationIsVisible = 0; 340 | }; 341 | /* End XCConfigurationList section */ 342 | }; 343 | rootObject = 99F12ADD1DA8E55D00E3A1AC /* Project object */; 344 | } 345 | --------------------------------------------------------------------------------