iOS快速自定義APP頂部標(biāo)題滾動(dòng)條

今天繼續(xù)說(shuō)仿喵播APP,聊一聊【自定義APP頂部標(biāo)題滾動(dòng)條】,用的是YZDisplayViewController,這是袁崢Seemygo大牛寫(xiě)的一個(gè)極其輕便簡(jiǎn)潔的小框架。快速集成App中頂部標(biāo)題滾動(dòng)條這是大神介紹YZDisplayViewController的原文。

下面是Gif展示:

頂部標(biāo)題滾動(dòng)效果.gif

現(xiàn)在來(lái)說(shuō)說(shuō)具體的使用:
1、去Github下載YZDisplayViewController解壓打開(kāi)?YZDisplayViewController-master文件夾,將其中的?YZDisplayViewController文件夾直接拖入你的項(xiàng)目中。
2、新建一個(gè)控制器,繼承自YZDisplayerViewController

@interface JFDisplayViewController : YZDisplayViewController

3、添加你所需要的子控制器

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setupAllChildCotroller];
}

// 添加子控制器
- (void)setupAllChildCotroller {
    JFViewController *jfVC = [[JFViewController alloc] init];
    jfVC.title = @"熱門(mén)";
    self.liveStreamVC = [[JFLiveStreamViewController alloc] init];
    _liveStreamVC.title = @"直播拉流測(cè)試";
    UIViewController *temp_2 = [[UIViewController alloc] init];
    temp_2.view.backgroundColor = [UIColor yellowColor];
    temp_2.title = @"關(guān)注";
    
    [self addChildViewController:jfVC];
    [self addChildViewController:_liveStreamVC];
    [self addChildViewController:temp_2];
}

然后運(yùn)行你的項(xiàng)目,就會(huì)看到神奇的效果啦。
作者只是寫(xiě)了幾個(gè)標(biāo)題樣式,如網(wǎng)易新聞,喜馬拉雅,騰訊視頻,今日頭條樣式等。這四種樣式在作者的簡(jiǎn)書(shū)中都有介紹。有時(shí)候這幾個(gè)標(biāo)題展示樣式不足以滿足項(xiàng)目需求,比如上面Gif展示的樣式。

實(shí)際上圖展示的滾動(dòng)標(biāo)題欄,控制器是隱藏了navigationBar,然后修改了源碼中YZNavBarH值為0,然后把標(biāo)題YZTitleScrollViewH背景高度設(shè)置成64,如果不做修改標(biāo)題欄會(huì)顯示在navigationBar下面,也就是YZNavBarH默認(rèn)值為64時(shí)展示的效果。

下面來(lái)具體說(shuō)說(shuō)對(duì)源碼做的修改:

  • 在YZDisplayHeader.h中修改

1、修改標(biāo)題欄背景View的起始Y值:YZNavBarH值,默認(rèn)是64;準(zhǔn)確的說(shuō)這個(gè)值指的是標(biāo)題欄也就是導(dǎo)航條的Y值。

// 導(dǎo)航條高度
static CGFloat const YZNavBarH = 64;

2、修改標(biāo)題欄背景View的高度:YZTitleScrollViewH值默認(rèn)是 44,如果想實(shí)現(xiàn)上圖展示的效果,隱藏navigationBar,YZTitleScrollViewH就需要設(shè)置成64。

// 標(biāo)題滾動(dòng)視圖的高度
static CGFloat const YZTitleScrollViewH = 44;

3、修改源碼,自定義標(biāo)題下劃線的長(zhǎng)度,下劃線的Y值和標(biāo)題欄的背景色,下面是我自己填加到源碼YZDisplayHeader.h中的代碼。方便日后使用。因?yàn)樽髡邲](méi)有提供相應(yīng)的接口,所以我就按照作者的代碼風(fēng)格添加 了靜態(tài)常量和宏定義。

/****** JFUnderLineW_additional增加下劃線的長(zhǎng)度******/
static CGFloat const JFUnderLineW_additional = 10;

/****** 改變下劃線的Y值,JFunderLineY_additional值越大下劃線的Y值越小******/
static CGFloat const JFunderLineY_additional = 5;

/****** 改變標(biāo)題label的Y值,jf_labelY值越大,標(biāo)題label的Y值越大******/
static CGFloat const jf_labelY = 8;

/****** 頂部標(biāo)題的背景顏色******/
#define JFRGBColor [UIColor colorWithRed:(253)/255.0 green:(95)/255.0 blue:(153)/255.0 alpha:1.0]

4、修改YZDisplayViewController.m文件源碼:
看下面修改后的代碼,將self.underLine.yz_y值減去之前自定義的靜態(tài)常量JFunderLineY_additional;將self.underLine.yz_width的值加上之前定義的靜態(tài)常量JFunderLineY_additional。

// 設(shè)置下標(biāo)的位置
- (void)setUpUnderLine:(UILabel *)label
{
    // 獲取文字尺寸
    CGRect titleBounds = [label.text boundingRectWithSize:CGSizeMake(MAXFLOAT, 0) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.titleFont} context:nil];
    
    CGFloat underLineH = _underLineH?_underLineH:YZUnderLineH;
    self.underLine.yz_y = label.yz_height - underLineH - JFunderLineY_additional;
    self.underLine.yz_height = underLineH;
    
    /***** 項(xiàng)目需要修改了yz_width + 10 ******/
    // 最開(kāi)始不需要?jiǎng)赢?huà)
    if (self.underLine.yz_x == 0) {
        if (_isUnderLineEqualTitleWidth) {
            self.underLine.yz_width = titleBounds.size.width + JFUnderLineW_additional;
        } else {
            self.underLine.yz_width = label.yz_width + JFUnderLineW_additional;
        }
        self.underLine.yz_centerX = label.yz_centerX;
        return;
    }
    
    // 點(diǎn)擊時(shí)候需要?jiǎng)赢?huà)
    [UIView animateWithDuration:0.25 animations:^{
        if (_isUnderLineEqualTitleWidth) {
            self.underLine.yz_width = titleBounds.size.width + JFUnderLineW_additional;
        } else {
            self.underLine.yz_width = label.yz_width + JFUnderLineW_additional;
        }
        self.underLine.yz_centerX = label.yz_centerX;
    }];  
}

如果在標(biāo)題被點(diǎn)擊或滑動(dòng)完成后想做些事情,可以監(jiān)聽(tīng)一下通知:

// 標(biāo)題被點(diǎn)擊或者內(nèi)容滾動(dòng)完成,會(huì)發(fā)出這個(gè)通知,監(jiān)聽(tīng)這個(gè)通知,可以做自己想要做的事情,比如加載數(shù)據(jù)
static NSString * const YZDisplayViewClickOrScrollDidFinshNote = @"YZDisplayViewClickOrScrollDidFinshNote";

如果想在重復(fù)點(diǎn)擊標(biāo)題后做事情,比如刷新數(shù)據(jù),可以監(jiān)以下通知:

// 重復(fù)點(diǎn)擊通知
static NSString * const YZDisplayViewRepeatClickTitleNote = @"YZDisplayViewRepeatClickTitleNote";

標(biāo)題的字體大小、字體顏色、標(biāo)簽的位子、下劃線長(zhǎng)度、位置;滑動(dòng)時(shí)字體的顏色漸變樣式等,都可以自定義。注意:下滑線和字體縮放不能同時(shí)使用,如果你使用了也會(huì)拋出異常提示。
這里就簡(jiǎn)單的介紹了我的思路,僅供參考。根據(jù)自己的項(xiàng)目需求修改YZDisplayViewController源碼,源碼很簡(jiǎn)單,作者的簡(jiǎn)書(shū)中也介紹的很清楚。今天就先聊這么多!
這里有我修改后的YZDisplayViewController源碼,需要的可以下載使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,095評(píng)論 1 92
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,080評(píng)論 4 61
  • 用戶體驗(yàn)的整個(gè)流程,都是為了確保用戶在你的產(chǎn)品上的所有體驗(yàn)不會(huì)發(fā)生在你“明確的、有意識(shí)的意圖”之外。 這就是說(shuō),要...
    Neil彭彭閱讀 11,065評(píng)論 2 27
  • 這一個(gè)三月,春氣滿巷,臨近午時(shí),在陽(yáng)光灑落的街角,空氣中有濕度,有溫度,清新中還有多少的青綠味和泥土的氣息,馬路上...
    深深是藍(lán)閱讀 600評(píng)論 1 5

友情鏈接更多精彩內(nèi)容