Эффект смены фрейма View на Subviews - PullRequest
0 голосов
/ 13 февраля 2019

Я должен знать это, но не знаю и не могу найти объяснения нигде.

Я перемещаю UIView в координатном пространстве окна и хотел бы, чтобы его подпредставление (tableView), добавленное в код, также перемещалось.Я не добавил никаких явных ограничений, связывающих подпредставление с его суперпредставлением, думая, что они будут двигаться в тандеме.Однако, насколько я могу судить, табличное представление не перемещается, когда я перемещаю суперпредставление.

Является ли нормальным поведение для подпредставления, созданного в коде, на которое не влияют изменения координат его суперпредставления?Если да, нужно ли вам добавлять ограничения в код, следует ли вручную перемещать подпредставления в то же время, когда вы перемещаете суперпредставление, или как вы можете заставить подпредставление перемещаться в тандеме?Вот код:

//Create view and subview (tableView):
 myView= [UIView new];
 CGFloat width = self.view.frame.size.width;
 CGFloat height=self.tableView.frame.size.height;
//Place offscreen
 [myView setFrame:CGRectMake(-width, 0, width, height)];
 [self.view addSubview:myView];

 aTableView = [UITableView new];
//Initially set frame to superview
 aTableView.frame = myView.frame;  
 [myView addSubview:aTableView];

//Move superview on screen

myRect = CGRectMake(0,0,width,height)];
myView.frame = myRect;

myView движется, но Tableview, кажется, не движется от этого в одиночку.Как я могу переместить это?

1 Ответ

0 голосов
/ 13 февраля 2019

Я предполагаю, что вы говорите "myView движется, но Tableview не движется" , потому что вы не видите Tableview на экране?Если это так, то похоже, что это связано с тем, как вы устанавливаете фреймы.

//Create view and subview (tableView):
 myView= [UIView new];
 CGFloat width = self.view.frame.size.width;
 CGFloat height=self.tableView.frame.size.height;

//Place offscreen
 [myView setFrame:CGRectMake(-width, 0, width, height)];
 [self.view addSubview:myView];

ОК - myView теперь находится вне экрана слева.Давайте предположим, что ширина 320, а высота 480, поэтому кадр вашего myView (например):

`-320, 0, 320, 480`

затем

 aTableView = [UITableView new];
//Initially set frame to superview
 aTableView.frame = myView.frame;  
 [myView addSubview:aTableView];

Ой, вы установили aTableView.frame = myView.frame; Это означаетКадр вашей таблицы:

`-320, 0, 320, 480`

, но относительно кадра myView.Итак, ваш табличный вид расположен 320-ptd слева от myView, который выходит на 640-pts слева от левого края экрана.

//Move superview on screen

myRect = CGRectMake(0,0,width,height)];
myView.frame = myRect;

Теперь вы переместили myView влево на0, поэтому он виден, но aTableView по-прежнему 320-pts слева от myView, поэтому он по-прежнему за кадром.

Изменение этой строки на:

aTableView.frame = myView.bounds

должен позаботиться об этом.

...