user387184
user387184

Reputation: 11053

How to setup the constraints for this layout correctly?

I have tried for long time now but keep getting crashes because of constraint problems...

How to set up this layout so it works on iPhone 3Gs, 4 and 5 as well as on iPad ?

_______TOP OF SCREEN________



Table View should attach to top of screen and with 5 pixels to the Label below
flexible in height so it works on iPhone 5 and 6


____________________________


Label with fixed distance to table View above and button below

____________________________

Button with fixed distance to Label above and fixed distance to bottom of screen

____________________________
      Bottom of screen

So basically all the distances and heights are fixed except the height of the table which should fill whatever is available between top of screen and the Label

Whenever I set the contstraints like that I keep getting crashes on iPhone 3 with iOS 6.1:

 2013-03-16 23:12:51.013 BMWhat Test[64196:907] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x1d1f2d70 h=-&- v=-&- UIView:0x1d1aac20.height == UITransitionView:0x1d174220.height - 20>",
    "<NSLayoutConstraint:0x1d1c03b0 V:[UILabel:0x1c58f100(21)]>",
    "<NSLayoutConstraint:0x1d1ce780 V:[UITableView:0x1cbd9000(469)]>",
    "<NSLayoutConstraint:0x1c5aff30 V:[UIButton:0x1d1d1bb0(44)]>",
    "<NSLayoutConstraint:0x1d1c0030 V:|-(0)-[UITableView:0x1cbd9000]   (Names: '|':UIView:0x1d1aac20 )>",
    "<NSLayoutConstraint:0x1d1921d0 V:[UILabel:0x1c58f100]-(1)-[UIButton:0x1d1d1bb0]>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c58e4d0 h=--- v=--- V:[UIWindow:0x1d002230(480)]>",
    "<NSLayoutConstraint:0x1d1cd6c0 V:[UITableView:0x1cbd9000]-(NSSpace(8))-[UILabel:0x1c58f100]>",
    "<NSLayoutConstraint:0x1d1ca370 V:[UIButton:0x1d1d1bb0]-(5)-|   (Names: '|':UIView:0x1d1aac20 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x1d172a90 h=--& v=-&- UITransitionView:0x1d174220.height == UIWindow:0x1d002230.height>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1d1ce780 V:[UITableView:0x1cbd9000(469)]>

Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

On Simulator iPhone Retina 4-inch iOS 6 it works fine.

Upvotes: 0

Views: 642

Answers (2)

Firoze Lafeer
Firoze Lafeer

Reputation: 17143

The issue is you are specifying a vertical constraint on the tableview tying its height to 469 pt. Since you want that tableview's height to be flexible, you don't want that constraint.

Upvotes: 2

Cliff Ribaudo
Cliff Ribaudo

Reputation: 9039

NSLayoutConstraint is only supported in iOS 6.

iPhone 3 does not support iOS 6. 3Gs is the earliest model that does.

Upvotes: 2

Related Questions