implement dropdowns properly with stackviews
This commit is contained in:
@@ -136,51 +136,68 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
}
|
||||
|
||||
func setupBackgroundColorDropdown() {
|
||||
// TODO: Find out how to acutally do UI and dropdowns with StackView
|
||||
backgroundColorDropdownButton.setTitle("Background color ▼", for: .normal)
|
||||
backgroundColorDropdownButton.setTitleColor(.white, for: .normal)
|
||||
backgroundColorDropdownButton.isHidden = true
|
||||
backgroundColorDropdownButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
topBarView.addSubview(backgroundColorDropdownButton)
|
||||
|
||||
NSLayoutConstraint.activate([
|
||||
backgroundColorDropdownButton.trailingAnchor.constraint(
|
||||
equalTo: topBarView.leadingAnchor, constant: 180),
|
||||
backgroundColorDropdownButton.centerYAnchor.constraint(
|
||||
equalTo: topBarView.centerYAnchor),
|
||||
])
|
||||
|
||||
backgroundColorDropdownButton.addTarget(
|
||||
self, action: #selector(toggleBackgroundColorDropdown), for: .touchUpInside)
|
||||
self, action: #selector(toggleBackgroundColorDropdown), for: .touchDown)
|
||||
|
||||
backgroundColorDropdownView.backgroundColor = UIColor.darkGray
|
||||
backgroundColorDropdownView.translatesAutoresizingMaskIntoConstraints = false
|
||||
backgroundColorDropdownView.isHidden = true
|
||||
backgroundColorDropdownButton.addSubview(backgroundColorDropdownView)
|
||||
view.addSubview(backgroundColorDropdownView)
|
||||
|
||||
let stackView = UIStackView()
|
||||
stackView.axis = .vertical
|
||||
stackView.spacing = 0
|
||||
stackView.distribution = .fillEqually // All buttons same height
|
||||
stackView.spacing = 8
|
||||
stackView.distribution = .fillEqually
|
||||
stackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
stackView.isLayoutMarginsRelativeArrangement = true
|
||||
stackView.layoutMargins = UIEdgeInsets(top: 8, left: 0, bottom: 8, right: 0)
|
||||
backgroundColorDropdownView.addSubview(stackView)
|
||||
|
||||
NSLayoutConstraint.activate([
|
||||
stackView.topAnchor.constraint(equalTo: backgroundColorDropdownView.topAnchor, constant: 32),
|
||||
stackView.bottomAnchor.constraint(equalTo: backgroundColorDropdownView.bottomAnchor),
|
||||
stackView.leadingAnchor.constraint(equalTo: backgroundColorDropdownView.leadingAnchor),
|
||||
stackView.trailingAnchor.constraint(equalTo: backgroundColorDropdownView.trailingAnchor),
|
||||
])
|
||||
|
||||
let titles = ["Option 1", "Option 2", "Option 3"]
|
||||
for title in titles {
|
||||
let colorOptions = ["White", "Gray", "Black", "Red", "Blue"]
|
||||
for title in colorOptions {
|
||||
let button = UIButton(type: .system)
|
||||
button.setTitle(title, for: .normal)
|
||||
button.setTitleColor(.white, for: .normal)
|
||||
button.contentHorizontalAlignment = .left
|
||||
button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 0)
|
||||
button.backgroundColor = .clear
|
||||
button.addTarget(self, action: #selector(handleBackgroundColorOption(_:)), for: .touchUpInside)
|
||||
button.translatesAutoresizingMaskIntoConstraints = false
|
||||
button.addTarget(
|
||||
self, action: #selector(handleBackgroundColorOption), for: .touchDown)
|
||||
stackView.addArrangedSubview(button)
|
||||
}
|
||||
|
||||
NSLayoutConstraint.activate([
|
||||
backgroundColorDropdownButton.leadingAnchor.constraint(
|
||||
equalTo: topBarView.leadingAnchor, constant: 32),
|
||||
backgroundColorDropdownButton.centerYAnchor.constraint(
|
||||
equalTo: topBarView.centerYAnchor),
|
||||
backgroundColorDropdownButton.topAnchor.constraint(
|
||||
equalTo: topBarView.topAnchor),
|
||||
backgroundColorDropdownButton.bottomAnchor.constraint(
|
||||
equalTo: topBarView.bottomAnchor),
|
||||
|
||||
backgroundColorDropdownView.topAnchor.constraint(
|
||||
equalTo: backgroundColorDropdownButton.bottomAnchor),
|
||||
backgroundColorDropdownView.leadingAnchor.constraint(
|
||||
equalTo: backgroundColorDropdownButton.leadingAnchor),
|
||||
backgroundColorDropdownView.trailingAnchor.constraint(
|
||||
equalTo: backgroundColorDropdownButton.trailingAnchor),
|
||||
|
||||
stackView.topAnchor.constraint(
|
||||
equalTo: backgroundColorDropdownView.topAnchor),
|
||||
stackView.bottomAnchor.constraint(equalTo: backgroundColorDropdownView.bottomAnchor),
|
||||
stackView.leadingAnchor.constraint(equalTo: backgroundColorDropdownView.leadingAnchor),
|
||||
stackView.trailingAnchor.constraint(
|
||||
equalTo: backgroundColorDropdownView.trailingAnchor),
|
||||
])
|
||||
|
||||
}
|
||||
|
||||
func setupPageTurnDropdown() {
|
||||
@@ -190,56 +207,62 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
pageTurnDropdownButton.translatesAutoresizingMaskIntoConstraints = false
|
||||
topBarView.addSubview(pageTurnDropdownButton)
|
||||
|
||||
NSLayoutConstraint.activate([
|
||||
pageTurnDropdownButton.trailingAnchor.constraint(
|
||||
equalTo: topBarView.trailingAnchor, constant: -16),
|
||||
pageTurnDropdownButton.centerYAnchor.constraint(equalTo: topBarView.centerYAnchor),
|
||||
])
|
||||
|
||||
pageTurnDropdownButton.addTarget(
|
||||
self, action: #selector(togglePageTurnDropdown), for: .touchUpInside)
|
||||
self, action: #selector(togglePageTurnDropdown), for: .touchDown)
|
||||
|
||||
pageTurnDropdownView.backgroundColor = UIColor.darkGray
|
||||
pageTurnDropdownView.translatesAutoresizingMaskIntoConstraints = false
|
||||
pageTurnDropdownView.isHidden = true
|
||||
view.addSubview(pageTurnDropdownView)
|
||||
|
||||
let stackView = UIStackView()
|
||||
stackView.axis = .vertical
|
||||
stackView.spacing = 8
|
||||
stackView.distribution = .fillEqually
|
||||
stackView.translatesAutoresizingMaskIntoConstraints = false
|
||||
stackView.isLayoutMarginsRelativeArrangement = true
|
||||
stackView.layoutMargins = UIEdgeInsets(top: 8, left: 0, bottom: 8, right: 0)
|
||||
pageTurnDropdownView.addSubview(stackView)
|
||||
|
||||
let pageTurnOptions = ["Left to right", "Right to left", "Scroll"]
|
||||
|
||||
var options: [UIButton] = []
|
||||
for option in pageTurnOptions {
|
||||
for title in pageTurnOptions {
|
||||
let button = UIButton(type: .system)
|
||||
button.setTitle(option, for: .normal)
|
||||
button.setTitle(title, for: .normal)
|
||||
button.setTitleColor(.white, for: .normal)
|
||||
button.addTarget(self, action: #selector(handlePageTurnOption), for: .touchUpInside)
|
||||
|
||||
button.contentHorizontalAlignment = .left
|
||||
button.backgroundColor = .clear
|
||||
button.translatesAutoresizingMaskIntoConstraints = false
|
||||
pageTurnDropdownView.addSubview(button)
|
||||
|
||||
options.append(button)
|
||||
button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 0)
|
||||
button.addTarget(
|
||||
self, action: #selector(handlePageTurnOption), for: .touchDown)
|
||||
stackView.addArrangedSubview(button)
|
||||
}
|
||||
|
||||
var constraints = [
|
||||
pageTurnDropdownView.topAnchor.constraint(equalTo: topBarView.bottomAnchor),
|
||||
pageTurnDropdownView.trailingAnchor.constraint(equalTo: topBarView.trailingAnchor),
|
||||
pageTurnDropdownView.widthAnchor.constraint(equalToConstant: 150),
|
||||
pageTurnDropdownView.heightAnchor.constraint(
|
||||
equalToConstant: CGFloat(options.count) * 32),
|
||||
]
|
||||
NSLayoutConstraint.activate([
|
||||
pageTurnDropdownButton.trailingAnchor.constraint(
|
||||
equalTo: topBarView.trailingAnchor, constant: -32),
|
||||
pageTurnDropdownButton.centerYAnchor.constraint(
|
||||
equalTo: topBarView.centerYAnchor),
|
||||
pageTurnDropdownButton.topAnchor.constraint(
|
||||
equalTo: topBarView.topAnchor),
|
||||
pageTurnDropdownButton.bottomAnchor.constraint(
|
||||
equalTo: topBarView.bottomAnchor),
|
||||
|
||||
for i in 0...options.count - 1 {
|
||||
constraints.append(
|
||||
options[i].topAnchor.constraint(
|
||||
equalTo: pageTurnDropdownView.topAnchor, constant: CGFloat(i) * 32))
|
||||
constraints.append(
|
||||
options[i].leadingAnchor.constraint(
|
||||
equalTo: pageTurnDropdownView.leadingAnchor, constant: 8))
|
||||
constraints.append(
|
||||
options[i].trailingAnchor.constraint(equalTo: pageTurnDropdownView.trailingAnchor))
|
||||
constraints.append(options[i].heightAnchor.constraint(equalToConstant: 32))
|
||||
}
|
||||
pageTurnDropdownView.topAnchor.constraint(
|
||||
equalTo: pageTurnDropdownButton.bottomAnchor),
|
||||
pageTurnDropdownView.leadingAnchor.constraint(
|
||||
equalTo: pageTurnDropdownButton.leadingAnchor),
|
||||
pageTurnDropdownView.trailingAnchor.constraint(
|
||||
equalTo: pageTurnDropdownButton.trailingAnchor),
|
||||
|
||||
stackView.topAnchor.constraint(
|
||||
equalTo: pageTurnDropdownView.topAnchor),
|
||||
stackView.bottomAnchor.constraint(equalTo: pageTurnDropdownView.bottomAnchor),
|
||||
stackView.leadingAnchor.constraint(equalTo: pageTurnDropdownView.leadingAnchor),
|
||||
stackView.trailingAnchor.constraint(
|
||||
equalTo: pageTurnDropdownView.trailingAnchor),
|
||||
])
|
||||
|
||||
NSLayoutConstraint.activate(constraints)
|
||||
}
|
||||
|
||||
@objc func handlePageTurnOption(_ sender: UIButton) {
|
||||
@@ -291,7 +314,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
func toggleTopBar() {
|
||||
topBarView.isHidden.toggle()
|
||||
|
||||
topBarHeightConstraint.constant = !topBarView.isHidden ? 60 : 0 // You can adjust height
|
||||
topBarHeightConstraint.constant = !topBarView.isHidden ? 64 : 0 // You can adjust height
|
||||
topBarLabel.isHidden = topBarView.isHidden
|
||||
|
||||
pageTurnDropdownButton.isHidden = topBarView.isHidden
|
||||
@@ -299,7 +322,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
|
||||
if topBarView.isHidden {
|
||||
pageTurnDropdownView.isHidden = true
|
||||
backgroundColorDropdownButton.isHidden = true
|
||||
backgroundColorDropdownView.isHidden = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
1
run.sh
1
run.sh
@@ -19,6 +19,7 @@ xcodebuild -scheme "$SCHEME" -derivedDataPath "$DERIVED_DATA" -destination "plat
|
||||
# Install and launch
|
||||
APP_PATH="$DERIVED_DATA/Build/Products/Debug-iphonesimulator/$APP_NAME.app"
|
||||
xcrun simctl install booted "$APP_PATH"
|
||||
xcrun simctl spawn booted log stream --predicate 'process == "ImageViewer"' --style syslog &
|
||||
xcrun simctl launch booted "$COMPANY.$APP_NAME"
|
||||
|
||||
sudo sed -i '' '/developerservices2\.apple\.com/d' /etc/hosts
|
||||
|
||||
Reference in New Issue
Block a user