Skip to content

Commit a581b0d

Browse files
authored
Merge pull request #25 from iWECon/dev
Fix height cacl error when use .fill
2 parents 7c2d320 + c956629 commit a581b0d

File tree

5 files changed

+17
-17
lines changed

5 files changed

+17
-17
lines changed

Demo/Demo/Base.lproj/Main.storyboard

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
</viewController>
101101
<placeholder placeholderIdentifier="IBFirstResponder" id="1JQ-CP-Uo0" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
102102
</objects>
103-
<point key="canvasLocation" x="2077" y="555"/>
103+
<point key="canvasLocation" x="2075.36231884058" y="554.46428571428567"/>
104104
</scene>
105105
</scenes>
106106
<resources>

Sources/StackKit/HStackView.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ extension HStackView {
170170
let unspacerViews = viewsWithoutSpacer()
171171
let spacersCount = spacerViews().map({ isSpacerBetweenInTwoViews(spacerView: $0) }).filter({ $0 }).count
172172
let number = unspacerViews.count - spacersCount - 1
173-
return (frame.width - viewsWidth() - lengthOfAllFixedLengthSpacer()) / CGFloat(max(1, number))
173+
return (_stackContentRect.width - viewsWidth() - lengthOfAllFixedLengthSpacer()) / CGFloat(max(1, number))
174174
}
175175

176176
private func viewsWidth() -> CGFloat {
@@ -197,7 +197,7 @@ extension HStackView {
197197
frame.size.height = contentSize.height
198198
}
199199
for subview in effectiveSubviews {
200-
subview.frame.size.height = _stackContentWidth
200+
subview.frame.size.height = _stackContentHeight
201201

202202
// fix #https://github.com/iWECon/StackKit/issues/21
203203
guard alignment == .center else {
@@ -208,7 +208,7 @@ extension HStackView {
208208
}
209209

210210
private func fillWidth() {
211-
let maxW = frame.width - lengthOfAllFixedLengthSpacer() - lengthOfAllFixedLengthDivider()
211+
let maxW = _stackContentRect.width - lengthOfAllFixedLengthSpacer() - lengthOfAllFixedLengthDivider()
212212
var w = (maxW) / CGFloat(viewsWithoutSpacerAndDivider().count)
213213

214214
let unspacersView = viewsWithoutSpacerAndDivider()
@@ -223,7 +223,7 @@ extension HStackView {
223223
extension HStackView {
224224

225225
private func fillDivider() {
226-
let maxHeight = effectiveSubviews.filter({ ($0 as? DividerView) == nil }).map({ $0.frame.size.height }).max() ?? frame.height
226+
let maxHeight = effectiveSubviews.filter({ ($0 as? DividerView) == nil }).map({ $0.frame.size.height }).max() ?? _stackContentRect.height
227227
for divider in effectiveSubviews.compactMap({ $0 as? DividerView }) {
228228
var maxLength = divider.maxLength
229229
if maxLength == .greatestFiniteMagnitude {

Sources/StackKit/Layer/HStackLayer.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ extension HStackLayer {
141141
let unspacerViews = viewsWithoutSpacer()
142142
let spacersCount = spacerLayers().map({ isSpacerBetweenInTwoLayers(spacerLayer: $0) }).filter({ $0 }).count
143143
let number = unspacerViews.count - spacersCount - 1
144-
return Swift.max(0, (frame.width - viewsWidth() - lengthOfAllFixedLengthSpacer()) / CGFloat(max(1, number)))
144+
return Swift.max(0, (_stackContentRect.width - viewsWidth() - lengthOfAllFixedLengthSpacer()) / CGFloat(max(1, number)))
145145
}
146146

147147
private func viewsWidth() -> CGFloat {
@@ -169,7 +169,7 @@ extension HStackLayer {
169169
frame.size.height = contentSize.height
170170
}
171171
for sublayer in effectiveSublayers {
172-
sublayer.frame.size.height = _stackContentWidth
172+
sublayer.frame.size.height = _stackContentHeight
173173

174174
guard alignment == .center else {
175175
continue
@@ -179,7 +179,7 @@ extension HStackLayer {
179179
}
180180

181181
private func fillWidth() {
182-
let maxW = frame.width - lengthOfAllFixedLengthSpacer() - lengthOfAllFixedLengthDivier()
182+
let maxW = _stackContentRect.width - lengthOfAllFixedLengthSpacer() - lengthOfAllFixedLengthDivier()
183183
var w = (maxW) / CGFloat(viewsWithoutSpacerAndDivider().count)
184184

185185
let unspacersView = viewsWithoutSpacerAndDivider()
@@ -193,7 +193,7 @@ extension HStackLayer {
193193
extension HStackLayer {
194194

195195
private func fillDivider() {
196-
let maxWidth = effectiveSublayers.filter({ ($0 as? DividerLayer) == nil }).map({ $0.frame.size.height }).max() ?? frame.height
196+
let maxWidth = effectiveSublayers.filter({ ($0 as? DividerLayer) == nil }).map({ $0.frame.size.height }).max() ?? _stackContentRect.height
197197
for divider in effectiveSublayers.compactMap({ $0 as? DividerLayer }) {
198198
var maxLength = divider.maxLength
199199
if maxLength == .greatestFiniteMagnitude {

Sources/StackKit/Layer/VStackLayer.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ extension VStackLayer {
143143
let unspacerViews = viewsWithoutSpacer()
144144
let spacersCount = spacerLayers().map({ isSpacerBetweenInTwoLayers(spacerLayer: $0) }).filter({ $0 }).count
145145
let number = unspacerViews.count - spacersCount - 1
146-
return Swift.max(0, (frame.height - viewsHeight() - lengthOfAllFixedLengthSpacer()) / CGFloat(max(1, number)))
146+
return Swift.max(0, (_stackContentRect.height - viewsHeight() - lengthOfAllFixedLengthSpacer()) / CGFloat(max(1, number)))
147147
}
148148

149149
private func viewsHeight() -> CGFloat {
@@ -183,7 +183,7 @@ extension VStackLayer {
183183
///
184184
/// 填充高度, 所有视图(排除 spacer)高度一致
185185
private func fillHeight() {
186-
let maxH = frame.height - lengthOfAllFixedLengthSpacer() - lengthOfAllFixedLengthDivier()
186+
let maxH = _stackContentRect.height - lengthOfAllFixedLengthSpacer() - lengthOfAllFixedLengthDivier()
187187
var h = (maxH) / CGFloat(viewsWithoutSpacerAndDivider().count)
188188

189189
let unspacersView = viewsWithoutSpacerAndDivider()
@@ -197,7 +197,7 @@ extension VStackLayer {
197197
extension VStackLayer {
198198

199199
private func fillDivider() {
200-
let maxWidth = effectiveSublayers.filter({ ($0 as? DividerLayer) == nil }).map({ $0.frame.size.width }).max() ?? frame.width
200+
let maxWidth = effectiveSublayers.filter({ ($0 as? DividerLayer) == nil }).map({ $0.frame.size.width }).max() ?? _stackContentRect.width
201201
for divider in effectiveSublayers.compactMap({ $0 as? DividerLayer }) {
202202
var maxLength = divider.maxLength
203203
if maxLength == .greatestFiniteMagnitude {
@@ -251,7 +251,7 @@ extension VStackLayer {
251251
}
252252

253253
let unspacerViewsMaxHeight = unspacerViewsHeight + unspacerViewsSpacing
254-
let spacersHeight = (frame.height - unspacerViewsMaxHeight - self.lengthOfAllFixedLengthSpacer())
254+
let spacersHeight = (_stackContentRect.height - unspacerViewsMaxHeight - self.lengthOfAllFixedLengthSpacer())
255255
let spacerWidth = spacersHeight / CGFloat(self.dynamicSpacerLayers().count)
256256

257257
let spacerViews = self.spacerLayers()

Sources/StackKit/VStackView.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ extension VStackView {
162162
let unspacerViews = viewsWithoutSpacer()
163163
let spacersCount = spacerViews().map({ isSpacerBetweenInTwoViews(spacerView: $0) }).filter({ $0 }).count
164164
let number = unspacerViews.count - spacersCount - 1
165-
return (frame.height - viewsHeight() - lengthOfAllFixedLengthSpacer()) / CGFloat(max(1, number))
165+
return (_stackContentRect.height - viewsHeight() - lengthOfAllFixedLengthSpacer()) / CGFloat(max(1, number))
166166
}
167167

168168
private func viewsHeight() -> CGFloat {
@@ -201,7 +201,7 @@ extension VStackView {
201201

202202
/// 填充高度, 所有视图(排除 spacer)高度一致
203203
private func fillHeight() {
204-
let maxH = frame.height - lengthOfAllFixedLengthSpacer() - lengthOfAllFixedLengthDivider()
204+
let maxH = _stackContentRect.height - lengthOfAllFixedLengthSpacer() - lengthOfAllFixedLengthDivider()
205205
var h = (maxH) / CGFloat(viewsWithoutSpacerAndDivider().count)
206206

207207
let unspacersView = viewsWithoutSpacerAndDivider()
@@ -216,7 +216,7 @@ extension VStackView {
216216
extension VStackView {
217217

218218
private func fillDivider() {
219-
let maxWidth = effectiveSubviews.filter({ ($0 as? DividerView) == nil }).map({ $0.frame.size.width }).max() ?? frame.width
219+
let maxWidth = effectiveSubviews.filter({ ($0 as? DividerView) == nil }).map({ $0.frame.size.width }).max() ?? _stackContentRect.width
220220
for divider in effectiveSubviews.compactMap({ $0 as? DividerView }) {
221221
var maxLength = divider.maxLength
222222
if maxLength == .greatestFiniteMagnitude {
@@ -274,7 +274,7 @@ extension VStackView {
274274

275275
// 非 spacerView 的所有宽度
276276
let unspacerViewsMaxHeight = unspacerViewsHeight + unspacerViewsSpacing
277-
let spacersHeight = (frame.height - unspacerViewsMaxHeight - self.lengthOfAllFixedLengthSpacer())
277+
let spacersHeight = (_stackContentRect.height - unspacerViewsMaxHeight - self.lengthOfAllFixedLengthSpacer())
278278
let spacerHeight = spacersHeight / CGFloat(self.dynamicSpacerViews().count)
279279

280280
let spacerViews = self.spacerViews()

0 commit comments

Comments
 (0)