Cómo agregar uiviews verticalmente (no horizontalmente) usando cgrect con un objetivo de bucle c

He estado tratando de agregar uiviews verticalmente y no horizontalmente (en otras palabras, en una columna y no en una fila), pero creo que no entiendo el código correctamente. Puedo cambiar y alterar cosas y entiendo lo que está sucediendo, pero parece que no puedo colocar estas uiviews verticalmente. He intentado cientos de cosas diferentes y estoy leyendo cgrect pero todavía no puedo encontrar qué hacer. Si alguien pudiera señalarme en la dirección correcta, sería muy apreciado.

 - (void) generateChat
    {
    int xcounter = 0;
    int longest = 0;
    _chatListRect.backgroundColor= [UIColor whiteColor];
    NSArray *commaChat01 = @[@"test 01",@"test 02",@"test 03",@"test 04"];
    for (NSString* str in commaChat01){
        
         CGSize result = [[UIScreen mainScreen]bounds].size;
         CGFloat
          x= 0.0, xt = 0.0,
          y= 0.0, yt = 0.0,
          w= 0.0, wt = 0.0,
          h= 0.0, ht = 0.0;
        
       if (result.width >= 0  && result.width <= 1500){
           x = 15; xt = 7.5;
           y = 10; yt = 7.5;
           w = 75; wt = 65;
           h = 75; ht = 75;
       }
             
        UIView *testview =[[UIView alloc]initWithFrame:CGRectMake((xcounter*(x+w))+x, y, w,h)];
    UIView *labelrect = [[UIView alloc]initWithFrame:CGRectMake(yt, xt, wt, ht)];
 
          testview.backgroundColor = UIColor.redColor;
        labelrect.backgroundColor = UIColor.blueColor;
          [testview.layer setCornerRadius:2.0f];
          [testview.layer setBorderColor:[UIColor lightGrayColor].CGColor];
          [testview.layer setBorderWidth:0.0f];
          UILabel *testlabel = [[UILabel alloc]initWithFrame:labelrect.bounds];
          testlabel.adjustsFontSizeToFitWidth = true;
         [testlabel setFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:20]];
          testlabel.textAlignment = NSTextAlignmentCenter;
          [self.view layoutIfNeeded];
          NSString *line1 = str;
           
           testlabel.text = line1;
           [labelrect addSubview:testlabel];
           [testview addSubview:labelrect];
           [_chatListRect addSubview:testview];
           xcounter = xcounter+1;
}
    longest =xcounter;
  xcounter =0;
    if (longest < xcounter){longest = xcounter;}

           _chatListRect.contentSize = CGSizeMake(100*longest,500);
                     
}
Answer

¿Conoces la diferencia entre límites y marco? Cuando se trata de posicionar una vista, no son ligeramente diferentes, son mundos aparte.

En consecuencia, establezca el centro de cada vista para colocarlas con precisión dentro de su supervista sin restricciones ni rarezas:

https://developer.apple.com/documentation/uikit/uiview/1622627-center

De lo contrario, llame al método setNeedsDisplay de su padre UIView.

Si no es así, ejecute el código relacionado con la subvista dentro de un parámetro de bloque UIView animateWithDuration:animations:.