jasnig / ZJScrollPageView

网易新闻, 腾讯视频, 头条 等首页的滑块视图联动的效果OC版的简单方便的集成, 滑块 segmentVIew, scrollViewController(Providing an easy way to reach the effect that "the segment scrolls with the content")
MIT License
1.11k stars 197 forks source link

autolayout 排版错乱 #17

Open huang1988519 opened 8 years ago

huang1988519 commented 8 years ago

能支持一下 autolayout么,嵌套用autolayout布局的界面,取到的self.view.frame 是错误的。

jasnig commented 8 years ago

@huang1988519 在viewWillLayoutSubviews中获取到的self.view.frame才是准确的

jasnig commented 8 years ago

@huang1988519 有时间的时候会尝试支持autolayout, 多谢提示

huang1988519 commented 8 years ago

@jasnig 恩,这个我知道,但是这个方法可能会被多次执行。我现在是的放在viewDidload中来解决初始化时的Frame错误。

- (void) viewDidload {
  ...
  GCD_Asyn_OnMain {
    [self initZJSegment];
    [self initZJContent];
  }
  ...
}

但是在往scrollview上布局子视图时,排版错误。所以我在 ZJContentView.m中 继承 layoutSubviews 来对子视图的frame记性二次计算。

-(void)layoutSubviews {
    [super layoutSubviews];

    if (self.currentView) {
        for (UIView * subView in self.currentView.subviews) {
            subView.frame = self.currentView.bounds;
        }
    }
}

正常使用时没有发现问题,但是偶尔还是会出现计算Page 时得到越界的next Index。 这个应该也不是大问题了。等有时间再改吧。

提个建议: 你现在的重用机制是 两个contianer view 循环使用。在左右来回切换时,对性能增加不必要的负担。 如果把当前视图的左右视图也常驻到内存当中,这样左右切换时不会进行额外操作,只有当停止滑动再进行下一个视图的显示。

jasnig commented 8 years ago

@huang1988519

  1. 关于越界的问题已经更改过了
  2. 关于frame的问题, 之前我在更改的时候遗漏了设置frame, 但是即使是像你这样在layoutSubviews中重新设置frame也是对在viewDidLoad中获取是没有作用的, 因为在添加控制器为子控制器的时候使用controller.view就已经触发了viewDidLoad方法, 所以在layoutSubviews中重新设置应该并不会影响viewDidLoad中获取到的frame变化, 只是因为在viewDidLoad中使用的是autolayout的话当然就会有受到影响了.
  3. 关于左右视图滑动的存放到内存的问题, 其实当第一次加载过view之后, 这个view就会有被缓存一段时间, 知道内存不够的时候才会重新创建, 来回切换的时候正常情况下都是直接取的内存中的view