Apple, Let’s Talk About “Explicit” and “Implicit”

Dear Apple,

I’m one of the guys who goes around saying “Apple API is one of the easiest GUI APIs I ever used”. Even when people complain about Objective-C, I point that since everything is a canvas, you can extended every component in any imaginable way.

I also get why Table Views go under the Navigation Bar, Tool Bar and Status Bar: To give the user the impression that the application stretches over all the screen instead of a small space in the middle.

But there is one thing I learnt with Python: Explicit is better than Implicit.

When you automatically add the default padding to an element dragged in the storyboard, I can see the padding in the Size inspector; when I set a relationship between two elements, I can see the constraint in the same Size inspector.

But when I drag a Table View to my View Controller and it automagically gets a padding to go under the navigation bar and there is nowhere to see this, then we have a problem.

When a UITableView is the first subview of the main view, it magically gets a padding; this is shown nowhere.

When a UITableView is the first subview of the main view, it magically gets a padding; this is shown nowhere (except in the storyboard, which makes you think you suddenly got a table header).

The same view as before, but the UITableView is not the first subview anymore; the padding disappears.

The same view as before, but the UITableView is not the first subview anymore; the padding disappears.

Things shouldn’t be like this. Sure, there is some obscure documentation saying “Hey, if your Table View is the first subview of a view, it will magically get a padding on the top”, but that is a total bullshit. What if I, somehow, want to keep some logical order that requires an element just below the navigation bar but my table view should still get the padding? What if I need a bigger padding, then?

This thing should never be magical. It should be a flag, a value, even a freaking constraint, but not a damn magical positional setting which is not obvious at first glance.

Seriously Apple, this is the kind of bullshit that ruins our relationship…