0

だから私は奇妙なバグを経験しています。私はUICollectionViewUITableViewの中に持っています。私は制約を加えないときはいつでもそれを表示します。単純な制約を使用して、コレクションビューをセルの左側に限定しようとしていますが、制約を追加するたびにビューが消えます。私は、自動レイアウトのバグや警告は表示されません。実際、デバッガは何らかのフラグをスローしません。しかし、まだ私は、制約が追加されたときにコレクションビューを表示することができません。 collectionViewの左側にラベルがあるはずです。私はどのようにして細胞に出現させるのですか?次のようにUITableviewCell内のUICollectionView。 UICollectionViewが一度だけ表示されない制約が追加される

コードは次のとおりです。助けを事前に

// Init the average usage label 
    self.labelMonthlyUsage = [[UILabel alloc] init]; 

    // Setup the average usage label 
    self.labelMonthlyUsage.userInteractionEnabled = NO; 
    self.labelMonthlyUsage.text = @"Monthly Usage:"; 
    self.labelMonthlyUsage.adjustsFontSizeToFitWidth = YES; 
    self.labelMonthlyUsage.translatesAutoresizingMaskIntoConstraints = NO; 
    self.labelMonthlyUsage.hidden = NO; 
    self.labelMonthlyUsage.numberOfLines = 1; 
    self.labelMonthlyUsage.textColor = [UIColor blackColor]; 
    self.labelMonthlyUsage.textAlignment = NSTextAlignmentLeft; 

    // Init the collection view 
    EPSCVFlowLayout *layout = [[EPSCVFlowLayout alloc] init]; 
    self.cvMonthlyUsage = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 190, 150) collectionViewLayout:layout]; 
    [self.cvMonthlyUsage registerClass:[EPSCollectionViewCell class] forCellWithReuseIdentifier:@"cvCell"]; 
    self.cvMonthlyUsage.delegate = self; 
    self.cvMonthlyUsage.dataSource = self; 
    self.cvMonthlyUsage.backgroundColor = [UIColor greenColor]; 
    self.cvMonthlyUsage.translatesAutoresizingMaskIntoConstraints = NO; 
    self.cvMonthlyUsage.hidden = NO; 
    self.cvMonthlyUsage.userInteractionEnabled = YES; 
    self.cvMonthlyUsage.clipsToBounds = YES; 
    self.cvMonthlyUsage.scrollEnabled = YES; 
    [self.cvMonthlyUsage setNeedsLayout]; 
    [self.cvMonthlyUsage layoutIfNeeded]; 

    // Add the views to the cell 
    [self addSubview:self.labelMonthlyUsage]; 
    [self addSubview:self.cvMonthlyUsage]; 

    // Add constraints for the views in the cell 
    NSLayoutConstraint *labelConstraint = [NSLayoutConstraint constraintWithItem:self.labelMonthlyUsage 
                      attribute:NSLayoutAttributeCenterY 
                      relatedBy:NSLayoutRelationEqual 
                       toItem:self 
                      attribute:NSLayoutAttributeCenterY 
                      multiplier:1 
                      constant:0]; 

    NSDictionary *views = [NSDictionary dictionaryWithObjects:@[self.labelMonthlyUsage, self.cvMonthlyUsage] 
                  forKeys:@[@"label", @"cv"]]; 

     NSArray *viewConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[label]-(>=8,<=300)-[cv]-10-|" 
                      options:NSLayoutFormatAlignAllCenterY 
                      metrics:nil 
                      views:views]; 

    [self addConstraint:labelConstraint]; 
    [self addConstraint:viewConstraints]; 

ありがとう!

+1

Xcodeのデバッグ表示機能を使用してみてください。あなたのビューが画面上のどこにあるのか、なぜそれが表示されます。また、画面に表示されたビューを表示するように指示することもできます。これは、画面の表示領域に表示されない理由を説明することがよくあります。 –

+0

あなたが言ったことだけで、制約が設定されているにもかかわらず、位置、サイズ、スクロール可能なコンテンツの制約がすべてあいまいであることがわかりました。正しい制約を追加すると、すべて正しく表示されます。提案していただきありがとうございます! – trigonoah

答えて

0

フィリップミルズのおかげで問題がわかりました。ビューデバッガにアクセスすると、UICollectionViewの位置とサイズがあいまいであることがわかりました。いくつかの新しい制約を加えた後、すべてがうまくいきます。一日を保存していただきありがとうございます!

関連する問題