Why does setting minWidth to .infinity crash SwiftUI app with EXC_BAD_INSTRUCTION?
Asked Answered
H

1

5

Here is the exact code that I am running on iOS 13.4/Xcode 11.4:

import SwiftUI

struct TestView: View {

    var body: some View {
        VStack() {
            Text("Hello")
        }
        .frame(minWidth: .infinity)
    }
}

struct LoginView_Previews: PreviewProvider {
    static var previews: some View {
        TestView()
    }
}

The crash happens in iOS, so it's hard to get much useful information other than the following:

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
#0  0x00007fff2c7cd371 in NSAttributedString.MetricsCache.findMetrics(requestedSize:) ()

Setting minWidth to something other than .infinity fixes the crash, so my question is why is it crashing and should I report it to Apple?

Hussy answered 5/5, 2020 at 21:50 Comment(3)
What are you trying to accomplish? Setting minWIdth to .infinity means the width must be infinite, which is impossibleLilley
I was trying to make the frame to be at 100%, then hit this issue, I realized the fix was to use .maxWidth, but also wanted to get to the bottom of this crash.Hussy
Trying to get the view to take up the whole width of the screen. If setting minWidth: .infinity isn't the right way to accomplish this it's a clear violation of the principle of least astonishment, and the fact that it crashes is just embarrassing. Setting maxWidth: .infinity doesn't make it do what I want in my case.Palmate
M
6

.infinity is an allowed value for a frame's maxWidth NOT for its minWidth it seems.

Museum answered 6/5, 2020 at 1:18 Comment(2)
Yeh, wish they had a more easily understood error. Should I report to Apple?Hussy
I doubt that'll change anything, because .infinity is a Float, an otherwise valid parameter for frame sizes. I strongly believe it's a parameter assertion that's throwing here.Museum

© 2022 - 2024 — McMap. All rights reserved.