【iOS】同一視圖多個tableView聯(lián)動迹蛤,共用一個headView

a.gif
實現(xiàn)一個控制器中視圖可滑動,上半部分可上下滑動襟士,下半部分可上下及左右切換場景

嘗試了多種方案:

方案1. 使用一個tableView承接所有自視圖盗飒,這種情況reloadData才能更換UI,但這樣也會閃屏陋桂,無法左右切換下半部分頁面逆趣,以及按鈕切換無法實現(xiàn)原子頁面不變,但視圖滾動流暢嗜历。
方案2. 使用一個scrollViewA承接上部分和一個承接下半部分的scrollViewB宣渗,這樣左右可實現(xiàn)滾動切換及保持原子頁面,但要實現(xiàn)上半部分和下半部分的視圖同步滾動梨州,需檢測下半部分子視圖中的tableViewC的偏移量并調(diào)節(jié)scrollViewA保持相同的偏移量并設置C的偏移量為原始偏移量痕囱,這樣保證了手勢在tableViewC的操作實現(xiàn)全頁面的滾動,但隨時設置偏移量這種做法使得頁面滾動不流暢暴匠。
方案3. viewControllerd的view承接一個scrollView和上半部分視圖鞍恢,scrollView上可以有多個tableview,tableview設置一個滿足上半部分遮蓋tableView是也無法遮擋內(nèi)容的headView(并不會顯示出來)headView的尺寸根據(jù)上半部分的尺寸及滾動的區(qū)間決定每窖。只需監(jiān)測tableView的偏移量來設置上半部分的位置帮掉,不需設置tableView的偏移量。

方案1岛请、3頁面滾動都很流暢旭寿,方案2、3都可以隨意切換下半部分子視圖崇败,相較方案3實用

方案3盅称、

///標記當前可控制的tableView肩祥,用于區(qū)別對待于滾動中設置另兩個tableView的偏移量
@property (nonatomic, strong) UITableView *currentTableView;


 //觀察者模式 觀察tableView的偏移量
 [self.firstViewController.tableView addObserver:self forKeyPath:@"contentOffset" options:(NSKeyValueObservingOptionNew) context:nil];
 [self.secondViewController.tableView addObserver:self forKeyPath:@"contentOffset" options:(NSKeyValueObservingOptionNew) context:nil];
 [self.thirdViewController.tableView addObserver:self forKeyPath:@"contentOffset" options:(NSKeyValueObservingOptionNew) context:nil];


- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
    if (object == self.currentTableView) {
        
        CGPoint offset = [[change valueForKey:NSKeyValueChangeNewKey] CGPointValue];
        
        ///只有imageView需要移動的時候才需要關心另外兩個tableView
        if (0 <= offset.y && offset.y <= 160) {
            CGRect rect = self.imageView.frame;
            rect.origin.y = self.label.frame.size.height + 160 - offset.y - self.imageView.bounds.size.height;
            self.imageView.frame = rect;
            [self resetTableViewOffset:offset];
            
        }else if (offset.y < 0){
            CGRect rect = self.imageView.frame;
            if (rect.origin.y != 0) {
                rect.origin.y = 0;
                self.imageView.frame = rect;
                [self resetTableViewOffset:CGPointMake(0, 0)];
            }
        }else if (offset.y > 160){
            CGRect rect = self.imageView.frame;
            if (rect.origin.y != 40 - self.imageView.bounds.size.height) {
                rect.origin.y = 40 - self.imageView.bounds.size.height;
                self.imageView.frame = rect;
                [self resetTableViewOffset:CGPointMake(0, 160)];
            }
        }
    }
}

- (void)resetTableViewOffset:(CGPoint)offset
{
    if (self.currentTableView == self.firstViewController.tableView) {
        
        self.secondViewController.tableView.contentOffset = offset;
        self.thirdViewController.tableView.contentOffset = offset;
    }else if (self.currentTableView == self.secondViewController.tableView) {
        
        self.firstViewController.tableView.contentOffset = offset;
        self.thirdViewController.tableView.contentOffset = offset;
    }else if (self.currentTableView == self.thirdViewController.tableView) {
        
        self.firstViewController.tableView.contentOffset = offset;
        self.secondViewController.tableView.contentOffset = offset;
    }
}

......

demo

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缩膝,隨后出現(xiàn)的幾起案子混狠,更是在濱河造成了極大的恐慌,老刑警劉巖疾层,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件将饺,死亡現(xiàn)場離奇詭異,居然都是意外死亡痛黎,警方通過查閱死者的電腦和手機予弧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湖饱,“玉大人掖蛤,你說我怎么就攤上這事【幔” “怎么了蚓庭?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長仅仆。 經(jīng)常有香客問我器赞,道長,這世上最難降的妖魔是什么墓拜? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任港柜,我火速辦了婚禮,結果婚禮上撮弧,老公的妹妹穿的比我還像新娘潘懊。我一直安慰自己,他們只是感情好贿衍,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布授舟。 她就那樣靜靜地躺著,像睡著了一般贸辈。 火紅的嫁衣襯著肌膚如雪释树。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天擎淤,我揣著相機與錄音奢啥,去河邊找鬼。 笑死嘴拢,一個胖子當著我的面吹牛桩盲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播席吴,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赌结,長吁一口氣:“原來是場噩夢啊……” “哼捞蛋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柬姚,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤拟杉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后量承,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搬设,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年撕捍,在試婚紗的時候發(fā)現(xiàn)自己被綠了晰骑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叶圃。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡使兔,死狀恐怖吃警,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阀蒂,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布弟蚀,位于F島的核電站蚤霞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏义钉。R本人自食惡果不足惜昧绣,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捶闸。 院中可真熱鬧夜畴,春花似錦、人聲如沸删壮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽央碟。三九已至税灌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亿虽,已是汗流浹背菱涤。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洛勉,地道東北人粘秆。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像收毫,于是被迫代替她去往敵國和親攻走。 傳聞我的和親對象是個殘疾皇子殷勘,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,097評論 1 32
  • 打卡內(nèi)容: 1劳吠、舒特方格10分鐘,3*3最快8秒巩趁。 2痒玩、國學:千家詩五首,《幼學瓊林》一頁 3议慰、感統(tǒng)訓練:吸盤球十...
    育兒顧問愉悅媽媽閱讀 228評論 0 3
  • 忽然發(fā)現(xiàn)平凡點滴里的不可思議别凹,忽然發(fā)現(xiàn)茫然無措里的緊緊相依草讶。原來為了遇見某個人繞了一圈又一圈后,為了喜歡一...
    c129806d136e閱讀 291評論 0 0
  • 很多進程是從系統(tǒng)啟動就開始運行炉菲,一直運行到系統(tǒng)關閉堕战。對于有這種特殊需求的進程,就給它取了個名字拍霜,叫守護進程嘱丢。由...
    rasishou閱讀 204評論 0 0
  • 我好想哭好想哭就是想哭不要問我為什么可是我哭不出來連個說話的人都沒有因為害怕把負能量傳給別人我不想看書不想復習明明...
    素錦修年閱讀 222評論 0 0