我有UIScrollView
。它有一個堆棧視圖。這個堆棧視圖包含12個按鈕。 (水平滾動視圖)將Stackview添加到UIScrollView
Stackview約束: - 頂部,前置,底部滾動視圖和相等的寬度,以滾動視圖。
我的問題是每次當我運行,堆棧視圖寬度限制滾動視圖寬度和按鍵太小acording堆棧視圖的寬度和我的滾動視圖不滾動的時間。
如何讓這個滾動
我有UIScrollView
。它有一個堆棧視圖。這個堆棧視圖包含12個按鈕。 (水平滾動視圖)將Stackview添加到UIScrollView
Stackview約束: - 頂部,前置,底部滾動視圖和相等的寬度,以滾動視圖。
我的問題是每次當我運行,堆棧視圖寬度限制滾動視圖寬度和按鍵太小acording堆棧視圖的寬度和我的滾動視圖不滾動的時間。
如何讓這個滾動
的Step-by-步驟在IB /故事板設置此功能...
當我添加按鈕,並將它們分組到堆棧視圖,然後設置約束,,然後我的按鈕出現在滾動下面不知道什麼是錯的 – user1960169
如果你讓你的Stackview寬度等於滾動視圖寬度,那麼這就是你會得到的,當然也不會滾動。
不要給你的Stackview寬度約束......讓按鈕「補出來」。
編輯:下面是一個簡單的例子,你可以在一個遊樂場頁直接運行:
import UIKit
import PlaygroundSupport
class TestViewController : UIViewController {
let scrollView: UIScrollView = {
let v = UIScrollView()
v.translatesAutoresizingMaskIntoConstraints = false
v.backgroundColor = .cyan
return v
}()
let stackView : UIStackView = {
let v = UIStackView()
v.translatesAutoresizingMaskIntoConstraints = false
v.axis = .horizontal
v.distribution = .equalSpacing
v.spacing = 10.0
return v
}()
override func viewDidLoad() {
super.viewDidLoad()
// add the scroll view to self.view
self.view.addSubview(scrollView)
// constrain the scroll view to 8-pts on each side
scrollView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 8.0).isActive = true
scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: 8.0).isActive = true
scrollView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -8.0).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -8.0).isActive = true
// add the stack view to the scroll view
scrollView.addSubview(stackView)
// constrain the stackview view to 8-pts on each side
// this *also* controls the .contentSize of the scrollview
stackView.leftAnchor.constraint(equalTo: scrollView.leftAnchor, constant: 8.0).isActive = true
stackView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 8.0).isActive = true
stackView.rightAnchor.constraint(equalTo: scrollView.rightAnchor, constant: -8.0).isActive = true
stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: -8.0).isActive = true
// add ten buttons to the stack view
for i in 1...10 {
let b = UIButton()
b.translatesAutoresizingMaskIntoConstraints = false
b.setTitle("Button \(i)", for: .normal)
b.backgroundColor = .blue
stackView.addArrangedSubview(b)
}
}
}
let vc = TestViewController()
vc.view.backgroundColor = .yellow
PlaygroundPage.current.liveView = vc
所以我想給每個按鈕的寬度約束? – user1960169
您不需要*,因爲'UIButton'具有基於標籤的固有寬度。或者,你可以給他們明確的寬度約束。 – DonMag
我刪除了堆棧視圖的寬度約束,也等於滾動視圖。並設置每個按鈕的寬度約束。我通過代碼寬度= 120 * 12和heigth = scrollview.height來設置scrollview的內容大小。但滾動視圖不滾動。 – user1960169
所以,你要這樣:
這裏是我做到了在Xcode 8.3.3。
新建項目> iOS> Single View Application。
打開Main.storyboard。
將滾動視圖拖到場景中。
針頂端,導致,和滾動視圖爲0設定高度的尾隨至30
將水平堆疊視圖到滾動視圖。
引腳所有四個堆棧視圖的邊緣爲0
設置堆棧視圖間距4.
將十二個按鈕進棧圖。
將目標設備設置爲iPhone SE。
Build & run。
得到的文檔大綱:
謝謝,,這也工作,雖然我接受第一個:)但是我投票 – user1960169
你有滾動視圖內的內容查看或者你直接添加stackview向滾動型?請參閱[使用滾動視圖的Apple指南](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithScrollViews.html) – TheBaj
否我沒有內容視圖,即時添加堆棧直接查看滾動視圖@TheBaj – user1960169
那麼,不要那樣做。閱讀指南,並按照步驟,你應該沒問題。 – TheBaj