UIScrollView(Paged) - > UICollectionView
我有一个带分页的UIScrollView。 UIScrollView的每个页面都有一个UICollectionView。每个集合视图单元格具有不同的字体大小因此,我根据其类型动态设置每个集合视图单元的字体大小。
现在,我将字体大小设置在UICollectionView Delegate的 cellForitemAtIndexPath 中。
minFontSize = [self findFontSizeforLabel:cell.productTitle];
现在我设置了这样的字体文字和大小,
cell.productTitle.text = [product.title uppercaseString];
[cell.productTitle setFont:[UIFont fontWithName:@"PFBagueSansPro-Black" size:minFontSize]];
NSLog(@"Product Title %@ set at font size %.2f and current minFontSize is %.2f",cell.productTitle.text,cell.productTitle.font.pointSize,minFontSize);
日志显示标题设置的字体大小正确,但在屏幕上仍然呈现故事板中设置的默认字体大小。
我有两种方案可以很好地运作,
当应用加载时,对用户隐藏了colelctionview。当用户单击按钮时,每页都会加载数据。
场景1:在第一个集合视图单元格上正确设置动态计算的字体。不在别人身上。所有其他集合视图单元格显示从Storyboard设置的字体大小。
场景2:启动应用,单击按钮以显示集合视图单元格。现在,与方案1中一样,只有第一个Collection视图正确设置字体。现在我再次单击该按钮以删除集合视图。现在我上次点击按钮以显示集合视图。这次所有集合视图单元格都显示正确的字体大小。
我不确定为什么我会看到这种行为。
这是我将集合视图加载到ScrollView的方法。这在循环内部调用(正如我提到的scrollview的每个页面都有一个集合视图)
if(view.itemsViewController == nil){
view.itemsViewController = [[PackageItemsViewController alloc] initWithDelegate:self];
[view.productsColectionView registerNib:[UINib nibWithNibName:@"ProductCell" bundle:[ResourceBundle bundle]] forCellWithReuseIdentifier:@"Product Cell"];
view.itemsViewController.jPackage = package;
view.productsColectionView.collectionViewLayout = [[UICollectionViewFlowLayout alloc] init];
view.productsColectionView.dataSource = view.itemsViewController;
view.productsColectionView.delegate = view.itemsViewController;
view.itemsViewController.collectionView = view.productsColectionView;
[view.itemsViewController viewDidLoad];
}
这是cellForItemAtIndexPath的代码,
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
ProductCell *cell = (ProductCell*)[collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
Product *product = [products objectAtIndex:indexPath.row];
//minFontSize = [self findFontSizeforLabel:cell.productTitle];
cell.productTitle.text = [product.title uppercaseString];
//[cell.productTitle setFont:[UIFont fontWithName:@"PFBagueSansPro-Black" size:15]];
cell.productSubTitle.text = [product.subTitle uppercaseString];
[cell.productPrice setPrice:product.skProduct.price withLocale:product.skProduct.priceLocale];
[cell.recommendedIcon setHidden:!product.isRecommended];
return cell;
}