2013-02-12 2 views
0

G'Day парней,Перегруппировка подвиды от 2 линии до 1, в соответствии с ориентацией устройства

Я изначально ориентируюсь на iPhone, с iOS6.1, но намеками и кодом, способным работать без сбоев и на iPhone с iOS5. 1 приветствуется.

У меня есть пользовательские UITableViewCell с 7 различных меток в качестве подвидов:

-(id) initWithStyle: (UITableViewCellStyle) style reuseIdentifier: (NSString*) reuseIdentifier 
{ 
    self = [super initWithStyle : style reuseIdentifier : reuseIdentifier] ; 

    if (self){ 

//Adding Subviews 

[self.contentView addSubView : self.myLabel1] ; 
[self.contentView addSubView : self.myLabel2] ; 
[self.contentView addSubView : self.myLabel3] ; 
[self.contentView addSubView : self.myLabel4] ; 
[self.contentView addSubView : self.myLabel5] ; 
[self.contentView addSubView : self.myLabel6] ; 
[self.contentView addSubView : self.myLabel7] ; 
} 
return self; 
} 

Когда я лениво экземпляр этикетки Я полагаю, начиная ориентация портрета и метки расположены на двух разных линий:

-(UILabel*) myLabel1 
{ 
    if (!_myLabel1){ 
     _myLabel1 = [UILabel alloc] initWithFrame: CGRectMake(10,30,40,20); 
     _myLabel1.numberOfLines = 1; 
     _myLabel1.opaque = YES; 
} 
return _myLabel1; 
} 

-(UILabel*) myLabel2 
{ 
    if (!_myLabel2){ 
     _myLabel2 = [UILabel alloc] initWithFrame: CGRectMake(50,30,40,20); 
     _myLabel2.numberOfLines = 1; 
     _myLabel2.opaque = YES; 
} 
return _myLabel2; 
} 

-(UILabel*) myLabel3 
{ 
    if (!_myLabel3){ 
     _myLabel3 = [UILabel alloc] initWithFrame: CGRectMake(90,30,40,20); 
     _myLabel3.numberOfLines = 1; 
     _myLabel3.opaque = YES; 
} 
return _myLabel3; 
} 


-(UILabel*) myLabel4 
{ 
    if (!_myLabel4){ 
     _myLabel4 = [UILabel alloc] initWithFrame: CGRectMake(10,60,40,20); 
     _myLabel4.numberOfLines = 1; 
     _myLabel4.opaque = YES; 
} 
return _myLabel4; 
} 

-(UILabel*) myLabel5 
{ 
    if (!_myLabel5){ 
     _myLabel5 = [UILabel alloc] initWithFrame: CGRectMake(50,60,40,20); 
     _myLabel5.numberOfLines = 1; 
     _myLabel5.opaque = YES; 
} 
return _myLabel5; 
} 


-(UILabel*) myLabel6 
{ 
    if (!_myLabel6){ 
     _myLabel6 = [UILabel alloc] initWithFrame: CGRectMake(90,60,40,20); 
     _myLabel6.numberOfLines = 1; 
     _myLabel6.opaque = YES; 
} 
return _myLabel6; 
} 


-(UILabel*) myLabel7 
{ 
    if (!_myLabel7){ 
     _myLabel7 = [UILabel alloc] initWithFrame: CGRectMake(130,60,40,20); 
     _myLabel7.numberOfLines = 1; 
     _myLabel7.opaque = YES; 
} 
return _myLabel7; 
} 

Я хотел бы спросить, что является лучшим способом для достижения этой цели:

«Если ориентация портрет затем расположить этикетки на 2 г ifferent, как указано выше, если ориентация является ландшафтом, тогда упорядочьте все метки, которые будут отображаться на одной строке. Перестановка должна быть автоматической, если пользователь изменит ориентацию.

Перегруппировка в ландшафтном режиме должна иметь все метки, выровненные с значением y 30 (вместо 30 для первой строки и 60 для второй строки). Значение x меток 4, 5, 6, 7 также должно измениться, так как вместо того, чтобы помещаться под этикетками 1,2,3, они будут расположены справа от метки 3. «

Btw, I что когда-то запуск приложения в реальном iPhone содержал «портрет» на столе, ориентация ошибочно сообщается как «пейзаж» как с iOS 5.1, так и с iIOS 6.1. Я нашел это, потому что начал играть с layoutSubviews: «потому что я думал, что это лучшее место для перестановки представлений, создающих новый кадр для каждого из них в соответствии с ориентацией устройства. Это лучший случай для автоматического отключения? Представление будет и будет создано программно.

Благодаря

Nicola

ответ

0

Спасибо за ваш ответ Kalpesh, но на самом деле после нескольких испытаний, я обнаружил, что лучший способ справиться с этим, чтобы иметь указатель в UITableViewCell его контроллера и использовать его, чтобы получить новая ориентация затем сделать перестановку в layoutSubviews:

@property(weak,nonatomic) UITableViewController *controller; 

-(void) layoutSubviews 
{ 
    [super layoutSubviews]; 


    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ 

     // I am on a Phone 

     NSLog(@"The new controller orientation is: %u", self.controller.interfaceOrientation); 

     if(self.controller.interfaceOrientation == UIInterfaceOrientationPortrait){ 
      NSLog(@"Phone - Controller orientation: Portrait."); 

      //Layout the subviews for portrait orientation 

      self.myLabel1.frame = CGRectMake(10,70,(self.frame.size.width-20)/4,20); 

      //.. 

     } else{ 
      NSLog(@"Phone - Controller orientation: Landscape."); 

      //Layout the subviews for landscape orientation 

      self.myLabel1.frame = CGRectMake(10,30,(self.frame.size.width-20)/4,20); 

      //.. 
     } 

    } else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad){ 

     // I am on a Pad 

     if(self.controller.interfaceOrientation == UIInterfaceOrientationPortrait){ 
      NSLog(@"Pad - Controller orientation: Portrait."); 

      //Layout the subviews for portrait orientation 

     } else{ 
      NSLog(@"Pad - Controller orientation: Landscape."); 

      //Layout the subviews for landscape orientation 
     } 

    } 
} 

во всяком случае, обновление таблицы в соответствии с предложением, вы можете быть полезным, чтобы изменить восемь строк!

EDIT: Высота ячейки автоматически перезагружается при изменении ориентации, поэтому нет необходимости принудительно перезаряжать стол. Nicola