you should do block enumeration, as this gives you also an index, that you can use to calculate y
[personList enumerateObjectsUsingBlock:^(Person *person, NSUInteger idx, BOOL *stop) {
UILabel *label1 = [[UILabel alloc] initWithFrame: CGRectMake(10, 10+20*idx , 50, 20)];
label1.text = person.name;
UILabel *label2 = [[UILabel alloc] initWithFrame: CGRectMake(70, 10+20 *idx, 50, 20)];
label2.text = person.dateStamp;
UILabel *label3 = [[UILabel alloc] initWithFrame: CGRectMake(130, 10+20*idx, 50, 20)];
label3.text = person.testScore;
[self.view addSubView:label1];
[self.view addSubView:label2];
[self.view addSubView:label3];
}];
You should place them on an UIScrollView, where you set the contentSize according to the number of elements in the array.
scrollView.contentSize = CGSizeMake(<width>, [personList count] / 3 *30);
You also should consider using an UITableView. It might be easier and cell re-use keeps the memory usage low.