forked from shadowfacts/Tusker
Don't leave space for checkbox when no checkboxes are shown
This commit is contained in:
parent
bf02b185ed
commit
735659dee6
|
@ -13,20 +13,23 @@ class PollOptionView: UIView {
|
||||||
|
|
||||||
private let unselectedBackgroundColor = UIColor(white: 0.5, alpha: 0.25)
|
private let unselectedBackgroundColor = UIColor(white: 0.5, alpha: 0.25)
|
||||||
|
|
||||||
let checkbox: PollOptionCheckboxView
|
private(set) var checkbox: PollOptionCheckboxView?
|
||||||
|
|
||||||
init(poll: Poll, option: Poll.Option, mastodonController: MastodonController) {
|
init(poll: Poll, option: Poll.Option, mastodonController: MastodonController) {
|
||||||
checkbox = PollOptionCheckboxView(multiple: poll.multiple)
|
|
||||||
|
|
||||||
super.init(frame: .zero)
|
super.init(frame: .zero)
|
||||||
|
|
||||||
|
|
||||||
let minHeight: CGFloat = 35
|
let minHeight: CGFloat = 35
|
||||||
layer.cornerRadius = 0.1 * minHeight
|
layer.cornerRadius = 0.1 * minHeight
|
||||||
layer.cornerCurve = .continuous
|
layer.cornerCurve = .continuous
|
||||||
backgroundColor = unselectedBackgroundColor
|
backgroundColor = unselectedBackgroundColor
|
||||||
|
|
||||||
checkbox.translatesAutoresizingMaskIntoConstraints = false
|
let showCheckbox = poll.ownVotes?.isEmpty == false || !poll.effectiveExpired
|
||||||
addSubview(checkbox)
|
if showCheckbox {
|
||||||
|
checkbox = PollOptionCheckboxView(multiple: poll.multiple)
|
||||||
|
checkbox!.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
addSubview(checkbox!)
|
||||||
|
}
|
||||||
|
|
||||||
let label = EmojiLabel()
|
let label = EmojiLabel()
|
||||||
label.translatesAutoresizingMaskIntoConstraints = false
|
label.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
@ -88,12 +91,9 @@ class PollOptionView: UIView {
|
||||||
NSLayoutConstraint.activate([
|
NSLayoutConstraint.activate([
|
||||||
minHeightConstraint,
|
minHeightConstraint,
|
||||||
|
|
||||||
checkbox.centerYAnchor.constraint(equalTo: centerYAnchor),
|
|
||||||
checkbox.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 8),
|
|
||||||
|
|
||||||
label.topAnchor.constraint(equalTo: topAnchor, constant: 4),
|
label.topAnchor.constraint(equalTo: topAnchor, constant: 4),
|
||||||
label.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -4),
|
label.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -4),
|
||||||
label.leadingAnchor.constraint(equalTo: checkbox.trailingAnchor, constant: 8),
|
|
||||||
label.trailingAnchor.constraint(equalTo: percentLabel.leadingAnchor, constant: -4),
|
label.trailingAnchor.constraint(equalTo: percentLabel.leadingAnchor, constant: -4),
|
||||||
|
|
||||||
percentLabel.topAnchor.constraint(equalTo: topAnchor),
|
percentLabel.topAnchor.constraint(equalTo: topAnchor),
|
||||||
|
@ -101,6 +101,16 @@ class PollOptionView: UIView {
|
||||||
percentLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -8),
|
percentLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -8),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
if let checkbox {
|
||||||
|
NSLayoutConstraint.activate([
|
||||||
|
checkbox.centerYAnchor.constraint(equalTo: centerYAnchor),
|
||||||
|
checkbox.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 8),
|
||||||
|
label.leadingAnchor.constraint(equalTo: checkbox.trailingAnchor, constant: 8),
|
||||||
|
])
|
||||||
|
} else {
|
||||||
|
label.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 8).isActive = true
|
||||||
|
}
|
||||||
|
|
||||||
isAccessibilityElement = true
|
isAccessibilityElement = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ class PollOptionsView: UIControl {
|
||||||
var mastodonController: MastodonController!
|
var mastodonController: MastodonController!
|
||||||
|
|
||||||
var checkedOptionIndices: [Int] {
|
var checkedOptionIndices: [Int] {
|
||||||
options.enumerated().filter { $0.element.checkbox.isChecked }.map(\.offset)
|
options.enumerated().filter { $0.element.checkbox?.isChecked == true }.map(\.offset)
|
||||||
}
|
}
|
||||||
var checkedOptionsChanged: (() -> Void)?
|
var checkedOptionsChanged: (() -> Void)?
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ class PollOptionsView: UIControl {
|
||||||
|
|
||||||
override var isEnabled: Bool {
|
override var isEnabled: Bool {
|
||||||
didSet {
|
didSet {
|
||||||
options.forEach { $0.checkbox.readOnly = !isEnabled }
|
options.forEach { $0.checkbox?.readOnly = !isEnabled }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,9 +65,11 @@ class PollOptionsView: UIControl {
|
||||||
|
|
||||||
options = poll.options.enumerated().map { (index, opt) in
|
options = poll.options.enumerated().map { (index, opt) in
|
||||||
let optionView = PollOptionView(poll: poll, option: opt, mastodonController: mastodonController)
|
let optionView = PollOptionView(poll: poll, option: opt, mastodonController: mastodonController)
|
||||||
optionView.checkbox.readOnly = !isEnabled
|
if let checkbox = optionView.checkbox {
|
||||||
optionView.checkbox.isChecked = poll.ownVotes?.contains(index) ?? false
|
checkbox.readOnly = !isEnabled
|
||||||
optionView.checkbox.voted = poll.voted ?? false
|
checkbox.isChecked = poll.ownVotes?.contains(index) ?? false
|
||||||
|
checkbox.voted = poll.voted ?? false
|
||||||
|
}
|
||||||
stack.addArrangedSubview(optionView)
|
stack.addArrangedSubview(optionView)
|
||||||
return optionView
|
return optionView
|
||||||
}
|
}
|
||||||
|
@ -77,13 +79,13 @@ class PollOptionsView: UIControl {
|
||||||
|
|
||||||
private func selectOption(_ option: PollOptionView) {
|
private func selectOption(_ option: PollOptionView) {
|
||||||
if poll.multiple {
|
if poll.multiple {
|
||||||
option.checkbox.isChecked.toggle()
|
option.checkbox?.isChecked.toggle()
|
||||||
} else {
|
} else {
|
||||||
for opt in options {
|
for opt in options {
|
||||||
if opt === option {
|
if opt === option {
|
||||||
opt.checkbox.isChecked = true
|
opt.checkbox?.isChecked = true
|
||||||
} else {
|
} else {
|
||||||
opt.checkbox.isChecked = false
|
opt.checkbox?.isChecked = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue