2016-08-30 1 views
0

Учитывая следующее изображение, объект B должен быть динамическим по высоте, исходя из количества UILabels внутри него. Объект B heigh должен затем влиять на высоту объекта C.Динамически менять высоту UIView в раскадровке на основе другой высоты UIViews

В настоящее время это реализовано в раскадровке, однако я застрял в этих двух вещах: от чего должен быть объект B? (Я не могу использовать представление стека в моей цели развертывания 7.1) он должен быть повторять лист

[uiview] - [uilabel] 

Object C является UIView, и я хотел бы высоту объекта B для осуществления своей высоты? как я могу это достичь?

enter image description here

+1

Трудно ответить, не видя какого-либо кода. Я бы вычислил высоты и позицию Y каждого объекта (object.frame.origin.Y и object.frame.size.height) и загрузил их в NSMutablearray. Затем создайте метод, который вы вызываете каждый раз, когда вам нужно изменить размер всех элементов, и в этом методе повторно назначить относительные позиции и высоты каждого элемента на основе элементов массива: [object setFrame: CGRecMake (...)]; – Alex

+0

Это можно сделать с помощью раскадровки (если вы используете), вам просто нужно установить равное ограничение по высоте для B и C и изменить соотношение для них по мере необходимости, после чего каждый раз, когда будет установлено ограничение высоты B, C автоматически обновит себя также с 'layoutIfNeeded' – Tj3n

+0

Как вы добавите больше' UILabels' в Object ** C **? –

ответ

2

Вы можете использовать этот тип кода

int lblY = 10; // As per your requirement 
int viewBHT = 50; // As per your requirement 

UILabel *lbl; 

NSMutableArray *arrLbl = [[NSMutableArray alloc] initWithObjects:@"1",@"1",@"1",@"1",@"1",@"1", nil]; 

UIView *viewB = [[UIView alloc] init]; 
[viewB setFrame:CGRectMake(0, viewA.frame.origin.y, self.view.frame.size.width, viewBHT)]; 
[viewB setBackgroundColor:[UIColor darkGrayColor]]; 
[self.view addSubview:viewB]; 

for (int i = 0; i < arrLbl.count; i++) 
{ 
    lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, lblY , viewB.frame.size.width - 20, 30)]; 
    [lbl setText:[NSString stringWithFormat:@"Hello %d",i]]; 
    [lbl setBackgroundColor:[UIColor lightGrayColor]]; 
    [viewB addSubview:lbl]; 

    lblY = lblY + lbl.frame.size.height + 10; 
} 

viewBHT = lbl.frame.size.height + lbl.frame.origin.y + 10; 
[viewB setFrame:CGRectMake(0, 80, self.view.frame.size.width, viewBHT)]; 

UIView *viewC = [[UIView alloc] init]; 
[viewC setFrame:CGRectMake(0, viewB.frame.origin.y + viewB.frame.size.height + 10, self.view.frame.size.width, 50)]; 
[viewC setBackgroundColor:[UIColor blueColor]]; 
[self.view addSubview:viewC]; 

Надежда это поможет вам .. !! :)

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