いくつかのバブルの最小幅を設定するための正しいアプローチはどれだろうと思っていました。カスタム セルで applyLayoutAttributes: をオーバーライドしようとしましたが、データ ソースにアクセスして、どのセルの幅を最小にする必要があるかを知る必要があります。cellForItemAtIndexPath: の messageBubbleLeftRightMargin をいじっていますが、結果はありません。どんなポインタでも素晴らしいでしょう
編集
私のメッセージモデル(に準拠)には、バブルに最小幅が必要かどうかを知らせるフラグがあります
カスタム セルでは、カスタム レイアウトをオーバーライドできますが、データソースにアクセスできないため、そのフラグにアクセスできません。
-(void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes{
JSQMessagesCollectionViewLayoutAttributes *customAttributes = (JSQMessagesCollectionViewLayoutAttributes *)layoutAttributes;
// I need access to my <JSQMessageData> for the condition
if (condition) {
if(customAttributes.messageBubbleContainerViewWidth <175){
customAttributes.messageBubbleContainerViewWidth = 175;
}
}
[super applyLayoutAttributes:customAttributes];
}
また、JSQMessagesViewController サブクラスで leftright 制約にアクセスしようとしましたが、役に立ちませんでした
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
/**
* Override point for customizing cells
*/
JSQMessagesCollectionViewCell *cell = (JSQMessagesCollectionViewCell *)[super collectionView:collectionView cellForItemAtIndexPath:indexPath];
BLMessage *message = [self.visibleMessagesArray objectAtIndex:indexPath.item];
JSQMessagesCollectionViewLayoutAttributes *customAttributes = [JSQMessagesCollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
if(message.isEphemeral){
//random number to see if it had an effect
self.collectionView.collectionViewLayout.messageBubbleLeftRightMargin = 200;
//I also tried modifying the customAttributes
//customAttributes.messageBubbleContainerViewWidth = 175;
}
return cell;
}
私はUICollectionViewFlowLayoutなどに慣れていないので、いくつかのコアコンセプトが欠けている可能性があります