當我試圖做一個UIScrollView只允許在水平方向上放大,使變焦的UIScrollView只在一個方向。滾動視圖使用純自動佈局方法進行設置。通常的方法是如在數堆棧溢出的答案(例如this one)和other資源建議。在自動佈局存在之前,我已經在應用程序中成功使用了它。該方法如下:在滾動視圖的內容視圖,我重寫setTransform()
,並修改傳入變換到上規模在x方向:如何使用自動佈局
override var transform: CGAffineTransform {
get { return super.transform }
set {
var t = newValue
t.d = 1.0
super.transform = t
}
}
我還重置滾動視圖的內容偏移,使得它不不使用自動佈局時
func scrollViewDidZoom(scrollView: UIScrollView) {
scrollView.contentSize = CGSize(width: scrollView.contentSize.width, height: scrollView.frame.height)
scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: 0.0)
}
這工作非常漂亮:「T變焦時垂直滾動
然而,在使用自動佈局時,內容偏移變焦過程中結束了錯。而在水平方向上的內容視圖只秤,它垂直移動:
我已經把一個例子項目on GitHub(用來在這個問題上的視頻)。它包含兩個故事板,Main.storyboard和NoAutolayout.storyboard,這是除了Main.storyboard相同的自動版式已開啓,同時NoAutolayout沒有。通過更改主界面項目設置在它們之間切換,您可以在兩種情況下看到行爲。
我真的寧願不關閉自動佈局,因爲它解決了以比手動佈局所需更好的方式實現我的用戶界面的許多問題。有沒有辦法在使用自動佈局進行縮放時保持垂直內容偏移正確(即爲零)?
編輯:我已經添加了第三個故事板AutolayoutVariableColumns.storyboard,到示例項目。這會添加一個文本字段來更改GridView中的列數,這會更改其內在內容大小。這更接近地顯示了我在真實應用程序中需要的行爲,這引發了這個問題。
謝謝安娜,這是一個有趣的方法,似乎它可以運作良好!我會給它一個機會,並會回報。 –
一個快速測試似乎表明,這將工作。我會在明天嘗試將它整合到我的實際項目中。再次感謝! –
當然!讓我知道你是否調整了它 - 我試圖解決同樣的問題。 (並確保你接受我的答案;-) –