關(guān)于UICollectionView分割線問題

需求為頁面顯示一些人的頭像和名字蚣驼,如果數(shù)據(jù)不足一行一铅,則在該行的后面加上空白顯示尊浪。

先給出最終效果圖(為了更直觀的看到線條票腰,線條顏色設(shè)置為紅色)

Simulator Screen Shot 2017年8月16日 11.14.24.png

使用UICollectionView

  1. 設(shè)置代理
@interface ViewController ()<UICollectionViewDelegateFlowLayout,UICollectionViewDataSource>
  1. 創(chuàng)建collectionView
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
    //設(shè)置滑動(dòng)方向
    flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
    flowLayout.minimumLineSpacing = 0;
    flowLayout.minimumInteritemSpacing = 0;
    CGFloat width = SCREEN_WIDTH / 4.0;
    flowLayout.itemSize = CGSizeMake(width, 110);
    
    _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout];
    _collectionView.backgroundColor = [UIColor colorWithHex:0xf5f7fa alpha:1];
    _collectionView.showsVerticalScrollIndicator = NO;
    _collectionView.delegate = self;
    _collectionView.dataSource = self;
    [self.view addSubview:self.collectionView];
    
    [_collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.mas_topLayoutGuideBottom).mas_offset(50);
        make.left.bottom.and.right.equalTo(self.view);
    }];
    [_collectionView registerClass:[ContentCell class] forCellWithReuseIdentifier:@"ContentCell"];
    [_collectionView registerClass:[NullContentCell class] forCellWithReuseIdentifier:@"NullContentCell"];
  1. 代理方法
#pragma mark -UICollectionViewDataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return self.peopleArray.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.item < self.peopleArray.count - (4 - _yu)) {
        
        static NSString *iden = @"ContentCell";
        ContentCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:iden forIndexPath:indexPath];
        
        cell.model = self.peopleArray[indexPath.item];
        
        return cell;
    }else {
        
        static NSString *iden = @"NullContentCell";
        NullContentCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:iden forIndexPath:indexPath];
        
        return cell;
    }
}
  1. 模擬請(qǐng)求數(shù)據(jù)
for (int i = 0; i < 10; i ++) {
        ComeOnModel *model = [[ComeOnModel alloc] init];
        model.encouragerName = [NSString stringWithFormat:@"pic%d", i];
        model.encouragerHeadUrl = [NSString stringWithFormat:@"pic%d", i];
        [self.peopleArray addObject:model];
    }
    
    if (self.peopleArray.count % 4 != 0) {
        self.yu = self.peopleArray.count % 4;
        
//若數(shù)據(jù)不足一行  補(bǔ)齊一行
        for (int i = 0; i < (4 - _yu); i ++) {
            ComeOnModel *model = [[ComeOnModel alloc] init];
            [self.peopleArray addObject:model];
        }
    }
    
    self.totalLabel.text = [NSString stringWithFormat:@"%ld位", self.peopleArray.count - (4 - _yu)];
    [self.collectionView reloadData];
  1. 內(nèi)容cell和空白cell

//ContentCell

[self.contentView addSubview:self.imgView];
    [self.contentView addSubview:self.nameLabel];
    
    [_imgView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(@20);
        make.size.mas_equalTo(CGSizeMake(50, 50));
        make.centerX.equalTo(self.contentView);
    }];
    
    [_nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(_imgView.mas_bottom).mas_offset(10);
        make.leading.and.trailing.equalTo(@0);
    }];


UIView *horLineView = [[UIView alloc] init];
    horLineView.backgroundColor = [UIColor redColor];
    [self.contentView addSubview:horLineView];
    [horLineView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.leading.and.bottom.and.trailing.equalTo(@0);
        make.height.equalTo(@0.5);
    }];
    
    UIView *verLineView = [[UIView alloc] init];
    verLineView.backgroundColor = [UIColor redColor];
    [self.contentView addSubview:verLineView];
    [verLineView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.and.bottom.and.trailing.equalTo(@0);
        make.width.equalTo(@0.5);
    }];

//NullContentCell

UIView *horLineView = [[UIView alloc] init];
    horLineView.backgroundColor = [UIColor redColor];
    [self.contentView addSubview:horLineView];
    [horLineView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.leading.and.bottom.and.trailing.equalTo(@0);
        make.height.equalTo(@0.5);
    }];
    
    UIView *verLineView = [[UIView alloc] init];
    verLineView.backgroundColor = [UIColor redColor];
    [self.contentView addSubview:verLineView];
    [verLineView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.and.bottom.and.trailing.equalTo(@0);
        make.width.equalTo(@0.5);
    }];
  • 5s運(yùn)行效果
Simulator Screen Shot 2017年8月16日 11.31.10.png
  • 7運(yùn)行效果
Simulator Screen Shot 2017年8月16日 11.31.40.png

很奇怪城看,5s下運(yùn)行效果沒問題 但6s、7下運(yùn)行就會(huì)出現(xiàn)有豎線不顯示問題杏慰。

修改

  • 如果我不使用autolayout布局 直接使用frame布局
UIView *horLineView = [[UIView alloc] init];
    horLineView.backgroundColor = [UIColor redColor];
    [self.contentView addSubview:horLineView];
    horLineView.frame = CGRectMake(0, self.bounds.size.height - 0.5, self.bounds.size.width, 0.5);
    
    UIView *verLineView = [[UIView alloc] init];
    verLineView.backgroundColor = [UIColor redColor];
    [self.contentView addSubview:verLineView];
    verLineView.frame = CGRectMake(self.bounds.size.width - 0.5, 0, 0.5, self.bounds.size.height);

7下運(yùn)行效果:

Simulator Screen Shot 2017年8月16日 11.34.39.png

此時(shí)豎線顯示测柠,但發(fā)現(xiàn)最右側(cè)屏幕邊上顯示豎線,這時(shí)可以設(shè)置collectionView寬度為屏幕寬度 + 0.5 隱藏掉該豎線逃默。

  • 如果cell中線條仍然使用autolayout布局鹃愤,但collectionView寬度修改為屏幕寬度 + 0.5,則不存在豎線不顯示情況完域。

  • 在視圖的layer層上添加線條

CALayer *bottomLineLayer = [[CALayer alloc] init];
    bottomLineLayer.frame = CGRectMake(0, self.bounds.size.height - 0.5, self.bounds.size.width, 0.5);
//    bottomLineLayer.backgroundColor = [UIColor colorWithRed:230/255.0 green:233/255.0 blue:237/255.0 alpha:1].CGColor;
    bottomLineLayer.backgroundColor = [UIColor redColor].CGColor;
    [self.contentView.layer addSublayer:bottomLineLayer];
    
    CALayer *rightLineLayer = [[CALayer alloc] init];
    rightLineLayer.frame = CGRectMake(self.bounds.size.width - 0.5, 0, 0.5, self.bounds.size.height);
//    rightLineLayer.backgroundColor = [UIColor colorWithRed:230/255.0 green:233/255.0 blue:237/255.0 alpha:1].CGColor;
    rightLineLayer.backgroundColor = [UIColor redColor].CGColor;
    [self.contentView.layer addSublayer:rightLineLayer];

使用該方式添加線條软吐,即使collectionView寬度不加0.5 線條均顯示,但最右側(cè)屏幕邊緣存在豎線吟税,還是設(shè)置collectionView寬度為屏幕寬度 + 0.5.

PS: 有同事建議寬或高度小于1單位的控件均在視圖的layer層上添加凹耙,常見于tableView和collectionView

代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肠仪,隨后出現(xiàn)的幾起案子肖抱,更是在濱河造成了極大的恐慌,老刑警劉巖异旧,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件意述,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吮蛹,警方通過查閱死者的電腦和手機(jī)荤崇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來潮针,“玉大人术荤,你說我怎么就攤上這事∶颗瘢” “怎么了瓣戚?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焦读。 經(jīng)常有香客問我子库,道長,這世上最難降的妖魔是什么矗晃? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任仑嗅,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘无畔。我一直安慰自己,他們只是感情好吠冤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布浑彰。 她就那樣靜靜地躺著,像睡著了一般拯辙。 火紅的嫁衣襯著肌膚如雪郭变。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天涯保,我揣著相機(jī)與錄音诉濒,去河邊找鬼。 笑死夕春,一個(gè)胖子當(dāng)著我的面吹牛未荒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播及志,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼片排,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了速侈?” 一聲冷哼從身側(cè)響起率寡,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倚搬,沒想到半個(gè)月后冶共,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡每界,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年捅僵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盆犁。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡命咐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谐岁,到底是詐尸還是另有隱情醋奠,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布伊佃,位于F島的核電站窜司,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏航揉。R本人自食惡果不足惜塞祈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帅涂。 院中可真熱鬧议薪,春花似錦尤蛮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哼御,卻和暖如春坯临,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恋昼。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工看靠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人液肌。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓挟炬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗦哆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辟宗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容