iOS边练边学--父子控件之作为导航控制器的子类产生的问题以及网易新闻练习

一、导航控制器的子类

  • 作为导航控制器的子类,并且是导航控制器子类中的第一个,系统会默认给子控件添加EdgeInsert属性,把导航栏的宽度挤出来。但是系统只会默认修改第一个。
  • 解决办法1:系统帮忙给第一个子控件添加了EdgeInsert,之后的子控件可以自己添加。
  • 解决办法2:将系统默认的操作取消 -- 
    // 自动调整scrollView的inserts     Adjust--调整的意思
        self.automaticallyAdjustsScrollViewInsets = NO;
  • 解决办法3:

二、网易新闻练习

  <1>搭建基本布局

  <2>联系中导航栏没有用按钮,用到了label -- 注意:label默认是不与用户进行交互的,设置:self.userInteractionEnabled = YES;

  一下代码是给label添加点击的手势

  <3>添加子控件,应该是导航栏有分几个模块,就对应有几个不同的子控制器。练习中,只用了一个控制器来搞了。以后的项目中要分开

  <4>通过代理实现要求的滚动效果,一个是监听人为滚动,动画速度减到0时的方法scrollViewDidEndDecelerating:

,另一个是监听动画完成后的滚动

  注意:练习中遇到了如图的bug,主要是因为用storyboard布局 600 * 600   显示的时候要经过自动布局,缩小到相应手机的屏幕大小。也就是有的尺寸要进行缩放。练习中自己取出的view是显示出来的尺寸375,而从storyboard中显示出来是在600的尺寸。系统会自动布局适应屏幕大小,600压缩到375,相应的里面的子控件也会从375压缩的更小。就出现了如图所示。

  <5>时刻监听scrollView的滚动,实现导航文字大小和颜色的变换

  <6>练习中出现的几个bug,在代码中有相应的解决办法

    

  <7>监听滚动,label要跟随滚动出现动画效果。封装了label,通过赋值label的scale,label根据scale自己设置将要显示的文字大小和颜色

原文地址:https://www.cnblogs.com/gchlcc/p/5407973.html