仿微博个人详情界面

效果

#define HeadViewH 200 // 顶部view高度

#define HeadViewMinH 44  //选项卡高度

#define tabBarH 64  //导航栏高度

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITableView *tabelView;

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *headHeightCons;/**顶部view的高度**/

@property (nonatomic,weak) UILabel *label; /** 导航栏文字*/

@property (nonatomic,assign) CGFloat beginOffset ;/** 初始偏移量*/

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 设置TableView数据源跟代理

self.tabelView.dataSource = self;

self.tabelView.delegate = self;

// 设置导航栏

[self setUpNavigationBar];

// 不需要添加额外滚动区域

self.automaticallyAdjustsScrollViewInsets = NO;

// 记录初始偏移量

_beginOffset = -(HeadViewH + HeadViewMinH);

// 设置tabelView顶部滚动区域 设置滚动区域会调用scrollViewDidScroll:这个方法

self.tabelView.contentInset = UIEdgeInsetsMake(HeadViewH + tabBarH, 0, 0, 0);

}

// 抽取导航栏设置

- (void)setUpNavigationBar

{

/**设置导航条的背景为透明*/

// UIBarMetricsDefault 设置导航条背景图片

// 传递一个空的UIImage

[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];

// 清空导航条的阴影线,传一个空的图片

[self.navigationController.navigationBar setShadowImage:[[UIImage alloc]init]];

/**

设置头部标题为透明

*/


UILabel *label = [[UILabel alloc]init];

label.text = @"年轻在于折腾";

// 设置文字颜色

label.textColor = [UIColor colorWithWhite:1 alpha:0];

// 尺寸自适应

[label sizeToFit];

_label = label;

// 添加到导航条

[self.navigationItem setTitleView:self.label];

}

#pragma mark UITableViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

/**

*  图片的处理

*/

// 获取当前偏移量的Y值

CGFloat curOffsetY = self.tabelView.contentOffset.y;

//偏移量的差值 = tabelView滚动了多少

// 当前偏移量的值 - 原始偏移量的值

CGFloat delta = curOffsetY - self.beginOffset;

// 求出图片高度

CGFloat H = HeadViewH - delta;

// 如果图片高度值小于的导航栏的高度,就让它跟导航栏等高

if (H < tabBarH) {

H = tabBarH;

}

// 图片的高度跟随偏移量的值改变

self.headHeightCons.constant = H ;

/**

*  导航栏的处理

*/

// 计算透明度

CGFloat alpha = delta / (HeadViewH - HeadViewMinH);

if (alpha > 1) {

alpha = 0.99;

}

// 设置导航栏文字

self.label.textColor = [UIColor colorWithWhite:0 alpha:alpha];

// 设置导航栏背景图片,根据当前alpha值生成图片

UIImage *image = [UIImage imageWithColor:[UIColor colorWithWhite:1 alpha:alpha]];

[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

}

图片的处理

+ (UIImage*)imageWithColor:(UIColor*)color

{

//描述矩形

CGRectrect=CGRectMake(0.0f,0.0f,1.0f,1.0f);

//开启位图上下文

UIGraphicsBeginImageContext(rect.size);

//获取位图上下文

CGContextRefcontext =UIGraphicsGetCurrentContext();

//使用color演示填充上下文

CGContextSetFillColorWithColor(context, [colorCGColor]);

//渲染上下文

CGContextFillRect(context, rect);

//从上下文中获取图片

UIImage*theImage =UIGraphicsGetImageFromCurrentImageContext();

//结束上下文

UIGraphicsEndImageContext();

returntheImage;

}

你可能感兴趣的:(仿微博个人详情界面)