Skip to content

Commit 088aef8

Browse files
authored
fix: 🐛 [bcp: 2370136916] fix width mode for DimensionSelector (#610)
1 parent 6462bb4 commit 088aef8

File tree

2 files changed

+22
-38
lines changed

2 files changed

+22
-38
lines changed

Apps/Examples/Examples/FioriSwiftUICore/DimensionSelector/DimensionSelector+Chart.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,17 @@ import FioriSwiftUICore
44
import SwiftUI
55

66
struct DimensionSelector_Chart: View {
7-
let segmentTitltes = ["intraday: 1min", "one day: 1min", "1year:1day", "3years:1week"]
7+
let segmentTitltes = ["1min", "One day", "1year: 1day", "Three years: one week"]
88

99
@ObservedObject var stockModel = Tests.stockModels[0]
1010

11+
@State var widthMode: SegmentWidthMode = .intrinsic
1112
var cancellableSet: Set<AnyCancellable> = []
12-
1313
var dimensionSelector: DimensionSelector!
1414

1515
init() {
1616
self.dimensionSelector = DimensionSelector(segmentTitles: self.segmentTitltes, selectedIndex: stockModel.indexOfStockSeries)
17+
self.dimensionSelector.segmentWidthMode = .equal
1718
let stockModel = self.stockModel
1819
self.dimensionSelector.selectionDidChangePublisher
1920
.sink(receiveValue: { index in
@@ -25,6 +26,7 @@ struct DimensionSelector_Chart: View {
2526
var body: some View {
2627
VStack(alignment: .center, spacing: 30) {
2728
dimensionSelector
29+
2830
chartView
2931
}
3032
}

Sources/FioriSwiftUICore/DimensionSelector/DimensionSelector.swift

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -203,21 +203,36 @@ public struct DimensionSelector: View {
203203
private func getHStack() -> some View {
204204
HStack(alignment: .center, spacing: self.model.interItemSpacing) {
205205
ForEach(self.model.titles.indices, id: \.self) { index in
206-
Segment(title: self.model.titles[index], isSelected: self.model.selectedIndex == index, isEnable: self.model.isEnable, cornerRadius: 10.0, backgroundColor: .preferredColor(.primaryFill), segmentAttributes: self.model.segmentAttributes, insets: self.titleInsets)
206+
Text(self.model.titles[index])
207+
.padding(self.titleInsets)
208+
.font(segmentAttributes(for: index)?.font)
209+
.foregroundColor(segmentAttributes(for: index)?.textColor)
210+
.background(SegmentPreferenceSetter())
211+
.modifier(SegmentFrame(segmentWidthMode: self.model.segmentWidthMode, width: self._segmentWidth))
212+
.background(
213+
RoundedRectangle(cornerRadius: 10, style: .continuous)
214+
.inset(by: segmentAttributes(for: index)!.borderWidth! / 2.0)
215+
.stroke(segmentAttributes(for: index)!.borderColor!, lineWidth: segmentAttributes(for: index)!.borderWidth!)
216+
)
217+
.background(RoundedRectangle(cornerRadius: 10, style: .continuous).fill(segmentAttributes(for: index)!.backgroundColor!))
207218
.onTapGesture {
208219
if self.model.isEnable {
209220
self.selectionDidChange(index: index)
210221
}
211222
}
212-
.background(SegmentPreferenceSetter())
213-
.modifier(SegmentFrame(segmentWidthMode: self.model.segmentWidthMode, width: self._segmentWidth))
214223
}
215224
}
216225
.padding(self.contentInset)
217226
.lineLimit(1)
218227
.background(HStackPreferenceSetter())
219228
}
220229

230+
func segmentAttributes(for index: Int) -> SegmentAttributes? {
231+
let isSelected = self.model.selectedIndex == index
232+
233+
return self.model.isEnable ? (isSelected ? self.model.segmentAttributes[.selected] : self.model.segmentAttributes[.normal]) : self.model.segmentAttributes[.disabled]
234+
}
235+
221236
private var _segmentWidth: CGFloat? {
222237
let width: CGFloat?
223238

@@ -249,39 +264,6 @@ public struct DimensionSelector: View {
249264
}
250265

251266
extension DimensionSelector {
252-
struct Segment: View {
253-
let title: String
254-
255-
let isSelected: Bool
256-
257-
let isEnable: Bool
258-
259-
let cornerRadius: CGFloat
260-
261-
let backgroundColor: Color
262-
263-
let segmentAttributes: [ControlState: SegmentAttributes]
264-
265-
let insets: EdgeInsets
266-
267-
var body: some View {
268-
Text(self.title)
269-
.padding(insets)
270-
.font(getSegmentAttributes()?.font)
271-
.foregroundColor(getSegmentAttributes()?.textColor)
272-
.background(
273-
RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)
274-
.inset(by: getSegmentAttributes()!.borderWidth! / 2.0)
275-
.stroke(getSegmentAttributes()!.borderColor!, lineWidth: getSegmentAttributes()!.borderWidth!)
276-
)
277-
.background(RoundedRectangle(cornerRadius: cornerRadius, style: .continuous).fill(getSegmentAttributes()!.backgroundColor!))
278-
}
279-
280-
func getSegmentAttributes() -> SegmentAttributes? {
281-
self.isEnable ? (self.isSelected ? self.segmentAttributes[.selected] : self.segmentAttributes[.normal]) : self.segmentAttributes[.disabled]
282-
}
283-
}
284-
285267
class Model: ObservableObject {
286268
@Published var titles: [String] = []
287269
@Published var selectedIndex: Int?

0 commit comments

Comments
 (0)