2016-11-04 2 views
1

Я сделал функциональность, чтобы выбрать адрес из списка доступных адресов. В этой демонстрации для представления таблицы я создал пользовательскую ячейку, которая автоматически настраивается для текста внутри UILabel (то есть адресное поле)Как изменить размер шрифта UILabel, соответствующий кадру uitabelviewcell при работе с ячейками для самостоятельной калибровки?

Проблема заключается в том, что при первом просмотре таблицы я нашел размер шрифта «адресная метка» в ячейках не имеет размера должным образом. Но когда я просматриваю представление таблицы, ячейки отображаются с правильным размером шрифта.

смотри ниже картинки:

Проблема

enter image description here

То, что я хочу

enter image description here

Я получаю второе поведение после перезагрузки tableview внутри viewDidAppear. Но он мерцает на моем экране. Пожалуйста помоги. Любая помощь оценивается.

мой код

вид controller.m

#import "AddressListViewController.h" 
#import "AddressListTableViewCell.h" 
#import "Utils.h" 

@interface AddressListViewController() <UITableViewDataSource, UITableViewDelegate> 

@property (weak, nonatomic) IBOutlet UITableView *addressListTableView; 
@property (strong, nonatomic) NSArray *arraySavedAddresses; 
@property (strong, nonatomic) NSMutableParagraphStyle *paragraphStyle; 

@end 

@implementation AddressListViewController 

#pragma mark - lazy instantiation 

- (NSArray *)arraySavedAddresses { 
    if (!_arraySavedAddresses) 
     _arraySavedAddresses = @[@"Studio 103, The Business Centre, 61 Wellfield Road, Roath, Cardiff, CF24 3DG", 
           @"Castor Richardson, P.O. Box 902 3472 Ullamcorper Street, Lynchburg DC 29738, (268) 442-2428, Mob. 9999999999", 
           @"Maharashtra India", 
           @"Office 33, 27 Colmore Row, Birmingham, England, B3 2EW"]; 
    return _arraySavedAddresses; 
} 

- (NSMutableParagraphStyle *)paragraphStyle { 
    if (!_paragraphStyle) { 
     _paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
     [_paragraphStyle setAlignment:NSTextAlignmentLeft]; 
     [_paragraphStyle setLineSpacing:5.0f]; 
    } 
    return _paragraphStyle; 
} 

#pragma mark - view controllers life cycle methods 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.view layoutIfNeeded]; 

    [self.addressListTableView setDataSource:self]; 
    [self.addressListTableView setDelegate:self]; 

    [self.addressListTableView setEstimatedRowHeight:80]; 
} 

#pragma mark - table view delegate methods 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self.arraySavedAddresses count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    AddressListTableViewCell *addressListTableViewCell = [tableView dequeueReusableCellWithIdentifier:@"AddressListTableViewCell" forIndexPath:indexPath]; 

    [Utils updateLabelFontSize:addressListTableViewCell.labelUsername ForInitialHeight:24 andInitialSize:24]; 
    [addressListTableViewCell.labelAddress setFont:[addressListTableViewCell.labelAddress.font fontWithSize:[addressListTableViewCell.labelUsername bounds].size.height * 0.666667]]; 

    [addressListTableViewCell.labelUsername setText:@"Demo User"]; 

    NSString *labelText = [self.arraySavedAddresses objectAtIndex:[indexPath row]]; 
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText]; 
    [attributedString addAttribute:NSParagraphStyleAttributeName value:self.paragraphStyle range:NSMakeRange(0, [labelText length])]; 
    [addressListTableViewCell.labelAddress setAttributedText:attributedString]; 

    return addressListTableViewCell; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return UITableViewAutomaticDimension; 
} 

@end 

tableviewcell.m

#import "AddressListTableViewCell.h" 
#import "Utils.h" 

@implementation AddressListTableViewCell 

- (void)awakeFromNib { 
    [super awakeFromNib]; 

    [[self.viewAddressInfo layer] setBorderColor:[[UIColor lightGrayColor] CGColor]]; 
} 

- (void)layoutSubviews { 
    [super layoutSubviews]; 

} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

- (IBAction)buttonRemoveAddressAction:(id)sender { 
    NSLog(@"Cancel Pressed"); 
} 

tableviewcell.h

#import <UIKit/UIKit.h> 

@interface AddressListTableViewCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UIView *viewAddressInfo; 
@property (weak, nonatomic) IBOutlet UILabel *labelUsername; 
@property (weak, nonatomic) IBOutlet UILabel *labelAddress; 
@property (weak, nonatomic) IBOutlet UIImageView *imageViewRadioSelection; 

@end 
+0

Где вы изменения размера метки/шрифт? – Tushar

+0

@hi tushar. Просто дай мне минутку. Я также загружаю свой код. Я изменяю размер метки внутри cellforrowatindexpath – appleBoy21

+0

@andrea - проблема в том, что я корректирую шрифт uilabel пропорционально [myUIlabel_address bounds] .size.height. Но в cellforrowatindexpath я не получаю фактическую высоту метки – appleBoy21

ответ

0

Наконец после поиска долго, я нашел решение. Я только создал новый кадр для uitableviewcell внутри cellforrowatindexpath.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    AddressListTableViewCell *addressListTableViewCell = [tableView dequeueReusableCellWithIdentifier:@"AddressListTableViewCell" forIndexPath:indexPath]; 

    CGFloat tableWidth = [tableView bounds].size.width; 
    if ([addressListTableViewCell frame].size.width != tableWidth) { 
     CGRect forcedFrame = [addressListTableViewCell frame]; 
     forcedFrame.size.width = tableWidth; 
     forcedFrame.size.height = 32000; 

     [addressListTableViewCell setFrame:forcedFrame]; 

     forcedFrame.origin.x = [[addressListTableViewCell contentView] frame].origin.x; 
     forcedFrame.origin.y = [[addressListTableViewCell contentView] frame].origin.y; 

     [[addressListTableViewCell contentView] setFrame:forcedFrame]; 
     [addressListTableViewCell layoutIfNeeded]; 
    } 

    [Utils updateLabelFontSize:addressListTableViewCell.labelUsername ForInitialHeight:24 andInitialSize:24]; 
    [addressListTableViewCell.labelAddress setFont:[addressListTableViewCell.labelAddress.font fontWithSize:[addressListTableViewCell.labelUsername bounds].size.height * 0.666667]]; 

    [addressListTableViewCell.labelUsername setText:@"Demo User"]; 

    NSString *labelText = [self.arraySavedAddresses objectAtIndex:[indexPath row]]; 
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText]; 
    [attributedString addAttribute:NSParagraphStyleAttributeName value:self.paragraphStyle range:NSMakeRange(0, [labelText length])]; 
    [addressListTableViewCell.labelAddress setAttributedText:attributedString]; 

    return addressListTableViewCell; 
} 

Получил хороший намек на этом сайте: http://useyourloaf.com/blog/self-sizing-table-view-cells/

0

В интерфейсе строителя, изменить Autoshrink до минимального масштаба шрифта и установить его на 0,5-0,7

+0

, пожалуйста, просмотрите мой код. Я недавно обновился. Если я изменил масштаб шрифта и использовал автозапуск, он регулирует только ширину метки. Не высота. Таким образом, он обрезал ярлык. Также мне нужны пропорциональные размеры меток – appleBoy21

Смежные вопросы