首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

iOS 導航控制器返回時殘留影像問題:scrollView.clipsToBounds 設定導致,於 viewWillDisappear 重置即可解決

     編輯:程式設計疑難解答

現象:在 UINavigationController 中,從頁面 A push 到頁面 B(B 含 UIScrollView),點擊返回鈕回到 A 時,B 頁的 scrollView 內容會在 A 頁殘留約 1 秒才消失。

根因

頁面 B 為了讓 scrollView 內容超出邊界顯示(如下拉刷新彈性效果、橫向卡片輪播),設定了 scrollView.clipsToBounds = false。轉場動畫期間,系統截圖/渲染邏輯未正確處理超出邊界的內容,導致殘影。

解決方法

在頁面 B 的 viewWillDisappear(_:) 中將 clipsToBounds 恢復為 true,轉場結束後若需保持原行為,可在 viewWillAppear(_:) 再改回 false。


override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    scrollView.clipsToBounds = true // 關鍵:轉場前裁切超出內容
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    scrollView.clipsToBounds = false // 還原業務需求
}

補充說明

  • 若 scrollView 是透過 Storyboard/XIB 設定,請在代碼中同步調整,IB 勾選「Clip Subviews」等同 clipsToBounds = true。
  • 此問題在 iOS 13+ 較常見,因轉場渲染管線變更。
  • 若不想頻繁切換屬性,可考慮將需超出顯示的子視圖移出 scrollView,改用獨立 view 容器,根治超出邊界渲染。

核心原則:**轉場/推出畫面前,確保可滾動視圖的 clipsToBounds 為 true,避免 GPU 殘留渲染緩衝區內容。**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved