I don't understand this assertion. It cannot both be true that you don't feel that there should be a user-facing distinction between a static or instance property and also that your particular example shouldn't be an instance property because it "is constant by nature."
Indeed, I'm arguing that both assertions are false: there is a semantic, user-facing distinction between static and instance properties, and your example is appropriately an example of the latter.
Again, static doesn't mean constant: it means that it's a property of the type rather than its instances.
For example, Double.pi is not appropriate as an instance property, not because it is a constant, but because it is not a property of a Double value: it makes no sense to write (4.0 as Double).pi. By contrast, both Int.bitWidth and (42 as Int).bitWidth exist because both the type has a fixed bit width and each instance of it has some bit width as well (which, of course, has to be fixed).
In your example, while all instances of MyButton may have the same height, this is of no consequence when you invoke frame(height:) inside body: surely, you want to pass along the height of this specific instance whether or not every other MyButton also has the same height.
If, for some reason, you also need to write an algorithm (say, a generic one over all UI elements with fixed height: I can see this being useful, say, for a scrollable container that allows only homogeneous elements) that works with the fixed height of MyButton without having an instance in hand, then you can appropriately declare a static property in addition (just like Int.bitWidth), but that does not mean that the height of a button is somehow not also a property of MyButton instances.
Because there is a user-facing, semantic difference between static and instance properties.
Unless I'm mistaken, those other OOP languages do not allow static and instance properties to have the same name.