UILabel无法使用正确的字体大小进行渲染

时间:2017-12-08 11:08:04

标签: ios objective-c uiscrollview uilabel uicollectionviewcell

  

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;
}

0 个答案:

没有答案