Naming Views for AutoLayout Debugging
| Originator: | david.anderson | ||
| Number: | rdar://12768358 | Date Originated: | 28-Nov-2012 |
| Status: | Duplicate | Resolved: | |
| Product: | iOS | Product Version: | 6.0 |
| Classification: | Enhancement | Reproducible: |
28-Nov-2012 11:27 AM David Anderson:
Summary:
When developing with Auto Layout on iOS 6, specifically when programmatically creating constraints between views, there is no capability to associate a *name* with a view such that when ambiguous or conflicting constraints are encountered the console output of the views and constraints uses the human-friendly names.
Apparently with Auto Layout in storyboards using interface builder there is a capacity to apply a name to a view for this purpose, however this same capability isn't available in code.
Steps to Reproduce:
Create conflicting constraints using the Auto Layout visual format language. Run the app and attempt to parse the exception report.
Expected Results:
The listing of views can be deciphered only by tracking and following the memory addresses, not the *name* of each view.
Actual Results:
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)
(
"<NSLayoutConstraint:0x12ce5af0 V:[UIView:0x12cdeb00(>=8)]>",
"<NSLayoutConstraint:0x12ce58f0 V:[UITextView:0x139b9000(>=80)]>",
"<NSLayoutConstraint:0x12ce56b0 V:[UILabel:0x12cd0070]-(0)-[UITextView:0x139bbe00]>",
"<NSLayoutConstraint:0x12ce5670 V:[UILabel:0x12cd0070(>=40)]>",
"<NSLayoutConstraint:0x12ce5480 V:[UILabel:0x12cd4ec0(>=40)]>",
"<NSLayoutConstraint:0x12ce5630 V:[UIView:0x12ccff50]-(0)-[UILabel:0x12cd0070]>",
"<NSLayoutConstraint:0x12ce5770 V:[UIView:0x12cd4da0(>=8)]>",
"<NSLayoutConstraint:0x12ce55b0 V:[UITextView:0x139bb200]-(1)-[UIView:0x12ccff50]>",
"<NSLayoutConstraint:0x12ce56f0 V:[UITextView:0x139bbe00(>=80)]>",
"<NSLayoutConstraint:0x12ce5530 V:[UILabel:0x12ccb270]-(0)-[UITextView:0x139bb200]>",
"<NSLayoutConstraint:0x12ce5240 V:[UIView:0x12ccb150]-(0)-[UILabel:0x12ccb270]>",
"<NSLayoutConstraint:0x12ce55f0 V:[UIView:0x12ccff50(>=8)]>",
"<NSLayoutConstraint:0x12ce5400 V:[UITextView:0x139ba600]-(1)-[UIView:0x12ccb150]>",
"<NSLayoutConstraint:0x12ce5570 V:[UITextView:0x139bb200(>=80)]>",
"<NSLayoutConstraint:0x12ce5380 V:[UILabel:0x12cc6450]-(0)-[UITextView:0x139ba600]>",
"<NSLayoutConstraint:0x12ce54f0 V:[UILabel:0x12ccb270(>=40)]>",
"<NSLayoutConstraint:0x12ce5300 V:[UIView:0x12cc6330]-(0)-[UILabel:0x12cc6450]>",
"<NSLayoutConstraint:0x12ce5440 V:[UIView:0x12ccb150(>=8)]>",
"<NSLayoutConstraint:0x12ce5280 V:[UITextView:0x139b7400]-(1)-[UIView:0x12cc6330]>",
"<NSLayoutConstraint:0x12ce5200 V:[UITextView:0x139b7400(>=80)]>",
"<NSLayoutConstraint:0x12ce51c0 V:[UILabel:0x12c320f0]-(0)-[UITextView:0x139b7400]>",
"<NSLayoutConstraint:0x12ce53c0 V:[UITextView:0x139ba600(>=80)]>",
"<NSLayoutConstraint:0x12ce5340 V:[UILabel:0x12cc6450(>=40)]>",
"<NSLayoutConstraint:0x12ce5120 V:[UIView:0x12c6a190]-(0)-[UILabel:0x12c320f0]>",
"<NSLayoutConstraint:0x12ce52c0 V:[UIView:0x12cc6330(>=8)]>",
"<NSLayoutConstraint:0x12ce50e0 V:[UIView:0x12c6a190(>=8)]>",
"<NSLayoutConstraint:0x12ce50a0 V:[UITextView:0x13998000]-(1)-[UIView:0x12c6a190]>",
"<NSLayoutConstraint:0x12ce5050 V:[UITextView:0x13998000(>=80)]>",
"<NSLayoutConstraint:0x12ce5010 V:[UILabel:0x12cb65e0]-(0)-[UITextView:0x13998000]>",
"<NSLayoutConstraint:0x12ce5180 V:[UILabel:0x12c320f0(>=40)]>",
"<NSLayoutConstraint:0x12ce4fc0 V:[UILabel:0x12cb65e0(>=40)]>",
"<NSLayoutConstraint:0x12ce4f60 V:|-(0)-[UILabel:0x12cb65e0] (Names: '|':UIView:0x12cb2710 )>",
"<NSLayoutConstraint:0x12c9c480 V:[UILabel:0x12c99990]-(>=1)-| (Names: '|':UIView:0x12c8c6a0 )>",
"<NSLayoutConstraint:0x12c9c400 V:[UILabel:0x12c97e60]-(1)-[UILabel:0x12c99990]>",
"<NSLayoutConstraint:0x12c9c380 V:[UILabel:0x12c97e60(>=40)]>",
"<NSLayoutConstraint:0x12c9c340 V:[UILabel:0x12c95fe0]-(1)-[UILabel:0x12c97e60]>",
"<NSLayoutConstraint:0x12c9c2a0 V:[UILabel:0x12c942c0]-(1)-[UILabel:0x12c95fe0]>",
"<NSLayoutConstraint:0x12c9c440 V:[UILabel:0x12c99990(>=40)]>",
"<NSLayoutConstraint:0x12c9c260 V:[UILabel:0x12c942c0(>=40)]>",
"<NSLayoutConstraint:0x12c9c220 V:[UILabel:0x12c8fdb0]-(1)-[UILabel:0x12c942c0]>",
"<NSLayoutConstraint:0x12c9c1e0 V:[UILabel:0x12c8fdb0(>=40)]>",
"<NSLayoutConstraint:0x12c9c190 V:[UILabel:0x12c8f940]-(0)-[UILabel:0x12c8fdb0]>",
"<NSLayoutConstraint:0x12c9c300 V:[UILabel:0x12c95fe0(>=40)]>",
"<NSLayoutConstraint:0x12c9c130 V:[UILabel:0x12c8f940(>=40)]>",
"<NSLayoutConstraint:0x12c9c0d0 V:|-(0)-[UILabel:0x12c8f940] (Names: '|':UIView:0x12c8c6a0 )>",
"<NSLayoutConstraint:0x12c81510 V:[UILabel:0x12c7f720]-(>=1)-| (Names: '|':UIView:0x12c7d470 )>",
"<NSLayoutConstraint:0x12c814d0 V:[UILabel:0x12c7f720(>=40)]>",
"<NSLayoutConstraint:0x12c81490 V:[UILabel:0x12c7df50]-(1)-[UILabel:0x12c7f720]>",
"<NSLayoutConstraint:0x12c81450 V:[UILabel:0x12c7df50(>=40)]>",
"<NSLayoutConstraint:0x12c81410 V:[UILabel:0x12c7dae0]-(0)-[UILabel:0x12c7df50]>",
"<NSLayoutConstraint:0x12c813d0 V:[UILabel:0x12c7dae0(>=40)]>",
"<NSLayoutConstraint:0x12c81370 V:|-(0)-[UILabel:0x12c7dae0] (Names: '|':UIView:0x12c7d470 )>",
"<NSLayoutConstraint:0x12c66b40 V:[UILabel:0x12c64830]-(>=1)-| (Names: '|':UIView:0x12c437a0 )>",
"<NSLayoutConstraint:0x12c66ac0 V:[UILabel:0x12c64830(>=40)]>",
"<NSLayoutConstraint:0x12c66a80 V:[UILabel:0x12c630f0]-(1)-[UILabel:0x12c64830]>",
"<NSLayoutConstraint:0x12c669e0 V:[UILabel:0x12c617b0]-(1)-[UILabel:0x12c630f0]>",
"<NSLayoutConstraint:0x12c669a0 V:[UILabel:0x12c617b0(>=40)]>",
"<NSLayoutConstraint:0x12c66960 V:[UILabel:0x12c453c0]-(1)-[UILabel:0x12c617b0]>",
"<NSLayoutConstraint:0x12c66920 V:[UILabel:0x12c453c0(>=40)]>",
"<NSLayoutConstraint:0x12c668d0 V:[UILabel:0x12c44970]-(0)-[UILabel:0x12c453c0]>",
"<NSLayoutConstraint:0x12c66a40 V:[UILabel:0x12c630f0(>=40)]>",
"<NSLayoutConstraint:0x12c66870 V:[UILabel:0x12c44970(>=40)]>",
"<NSLayoutConstraint:0x12c66810 V:|-(0)-[UILabel:0x12c44970] (Names: '|':UIView:0x12c437a0 )>",
"<NSLayoutConstraint:0x12ce5730 V:[UITextView:0x139bbe00]-(1)-[UIView:0x12cd4da0]>",
"<NSLayoutConstraint:0x12ce5870 V:[UIView:0x12cd4da0]-(0)-[UILabel:0x12cd4ec0]>",
"<NSLayoutConstraint:0x12ce58b0 V:[UILabel:0x12cd4ec0]-(0)-[UITextView:0x139b9000]>",
"<NSLayoutConstraint:0x12ce5930 V:[UITextView:0x139b9000]-(1)-[UIView:0x12cd9b70]>",
"<NSLayoutConstraint:0x12ce5970 V:[UIView:0x12cd9b70(>=8)]>",
"<NSLayoutConstraint:0x12ce59b0 V:[UIView:0x12cd9b70]-(0)-[UILabel:0x12cd9df0]>",
"<NSLayoutConstraint:0x12ce59f0 V:[UILabel:0x12cd9df0(>=40)]>",
"<NSLayoutConstraint:0x12ce5a30 V:[UILabel:0x12cd9df0]-(0)-[UITextView:0x139bda00]>",
"<NSLayoutConstraint:0x12ce5a70 V:[UITextView:0x139bda00(>=80)]>",
"<NSLayoutConstraint:0x12ce5ab0 V:[UITextView:0x139bda00]-(1)-[UIView:0x12cdeb00]>",
"<NSLayoutConstraint:0x12ce5b30 V:[UIView:0x12cdeb00]-(0)-[UILabel:0x12cdec20]>",
"<NSLayoutConstraint:0x12ce5b70 V:[UILabel:0x12cdec20(>=40)]>",
"<NSLayoutConstraint:0x12ce5bb0 V:[UILabel:0x12cdec20]-(0)-[UITextView:0x139be600]>",
"<NSLayoutConstraint:0x12ce5bf0 V:[UITextView:0x139be600(>=80)]>",
"<NSLayoutConstraint:0x12ce5c30 V:[UITextView:0x139be600]-(>=1)-| (Names: '|':UIView:0x12cb2710 )>",
"<NSLayoutConstraint:0x12c38ac0 V:[UILabel:0x12c38f30(38)]>",
"<NSLayoutConstraint:0xb439740 V:[UILabel:0x12c38f30]-(20)-[UIView:0x12c437a0]>",
"<NSLayoutConstraint:0xb430d30 V:[UIView:0x12cb2710]-(NSSpace(20))-| (Names: '|':UIView:0x12c38ed0 )>",
"<NSLayoutConstraint:0xb436270 V:[UIView:0x12c8c6a0]-(NSSpace(8))-[UIView:0x12cb2710]>",
"<NSLayoutConstraint:0xb436230 V:[UIView:0x12c7d470]-(NSSpace(8))-[UIView:0x12c8c6a0]>",
"<NSLayoutConstraint:0x99ab610 V:[UIView:0x12c437a0]-(NSSpace(8))-[UIView:0x12c7d470]>",
"<NSLayoutConstraint:0x12c39110 V:|-(0)-[UILabel:0x12c38f30] (Names: '|':UIView:0x12c38ed0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x99786c0 h=--& v=--& V:[TPKeyboardAvoidingScrollView:0x13983a00(748)]>",
"<NSAutoresizingMaskLayoutConstraint:0x994d8c0 h=-&- v=-&- UIView:0x12c38ed0.height == TPKeyboardAvoidingScrollView:0x13983a00.height>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x12ce5ab0 V:[UITextView:0x139bda00]-(1)-[UIView:0x12cdeb00]>
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.
Regression:
Notes:
Comments
Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!
Marked as duplicate of #10760865