簡體   English   中英

ios6自動布局約束

[英]ios6 autolayout constraints

我正在試圖弄清楚如何在UIViewController上使用約束(在UINavigationController里面的UITabBarController里面)......超過千言萬語,這就是我想要做的......

肖像Lanscape

實際上,第一個是100px高度,無論方向,第二個是廣告(因此50px的縱向和32px的橫向),最后一個tableView將采取其余的。

到目前為止,這是我的代碼:

PMMainProfilHeader  *profilHeader = [[PMMainProfilHeader alloc] init];
    [self.view addSubview:profilHeader];
    [profilHeader release];

    UIView *adTest = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)];
    adTest.backgroundColor = [UIColor redColor];
    [self.view addSubview:adTest];
    [adTest release];

    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.view addSubview:_tableView];
    [_tableView release];

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[profilHeader]-0-|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:NSDictionaryOfVariableBindings(profilHeader)]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[adTest]-0-|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:NSDictionaryOfVariableBindings(adTest)]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_tableView]-0-|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:NSDictionaryOfVariableBindings(_tableView)]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[profilHeader]-0-[adTest]-0-[_tableView]-0-|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:NSDictionaryOfVariableBindings(profilHeader, adTest, _tableView)]];

但當然它不起作用......我無法分辨為什么,當我恢復調試幾次時,我從調試器得到這個評論塊:

2013-02-22 00:17:13.207 MyApplication[6822: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) 
(
    "<NSLayoutConstraint:0x1d0b20d0 H:[UIView:0x1d0ae7e0]-(0)-|   (Names: '|':UIView:0x1c596de0 )>",
    "<NSLayoutConstraint:0x1d0b2090 H:|-(0)-[UIView:0x1d0ae7e0]   (Names: '|':UIView:0x1c596de0 )>",
    "<NSLayoutConstraint:0x1d0b2000 H:[PMMainProfilHeader:0x1d09f5b0]-(0)-|   (Names: '|':UIView:0x1c596de0 )>",
    "<NSLayoutConstraint:0x1d0b2320 H:|-(0)-[PMMainProfilHeader:0x1d09f5b0]   (Names: '|':UIView:0x1c596de0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5dcb10 h=--& v=--& UIView:0x1d0ae7e0.midX ==>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5daf80 h=--& v=--& PMMainProfilHeader:0x1d09f5b0.midX == + 160>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1d0b20d0 H:[UIView:0x1d0ae7e0]-(0)-|   (Names: '|':UIView:0x1c596de0 )>

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.
2013-02-22 00:17:41.706 MyApplication[6822: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) 
(
    "<NSLayoutConstraint:0x1c5ab460 V:[PMMainProfilHeader:0x1d09f5b0]-(0)-[UIView:0x1d0ae7e0]>",
    "<NSLayoutConstraint:0x1c5ab3f0 V:|-(0)-[PMMainProfilHeader:0x1d09f5b0]   (Names: '|':UIView:0x1c596de0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5dcca0 h=--& v=--& UIView:0x1d0ae7e0.midY ==>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5db050 h=--& v=--& PMMainProfilHeader:0x1d09f5b0.midY == + 50>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1c5ab460 V:[PMMainProfilHeader:0x1d09f5b0]-(0)-[UIView:0x1d0ae7e0]>

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.
2013-02-22 00:17:43.382 MyApplication[6822: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:0x1d0c0530 h=--& v=--& UITableView:0x1db44600.midX ==>",
    "<NSLayoutConstraint:0x1c5ab160 H:[UITableView:0x1db44600]-(0)-|   (Names: '|':UIView:0x1c596de0 )>",
    "<NSLayoutConstraint:0x1c5ab120 H:|-(0)-[UITableView:0x1db44600]   (Names: '|':UIView:0x1c596de0 )>",
    "<NSLayoutConstraint:0x1d0b2000 H:[PMMainProfilHeader:0x1d09f5b0]-(0)-|   (Names: '|':UIView:0x1c596de0 )>",
    "<NSLayoutConstraint:0x1d0b2320 H:|-(0)-[PMMainProfilHeader:0x1d09f5b0]   (Names: '|':UIView:0x1c596de0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5daf80 h=--& v=--& PMMainProfilHeader:0x1d09f5b0.midX == + 160>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1c5ab160 H:[UITableView:0x1db44600]-(0)-|   (Names: '|':UIView:0x1c596de0 )>

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.
2013-02-22 00:17:45.290 MyApplication[6822: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:0x1c5dcce0 h=--& v=--& V:[UIView:0x1d0ae7e0(0)]>",
    "<NSLayoutConstraint:0x1c5ab510 V:[UITableView:0x1db44600]-(0)-|   (Names: '|':UIView:0x1c596de0 )>",
    "<NSLayoutConstraint:0x1c5ab4b0 V:[UIView:0x1d0ae7e0]-(0)-[UITableView:0x1db44600]>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5ed510 h=-&- v=-&- UILayoutContainerView:0x1c5d1440.height == UIWindow:0x1c564480.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5ef2e0 h=--- v=--- V:[UIWindow:0x1c564480(480)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5eb9e0 h=-&- v=-&- UINavigationTransitionView:0x1c5d2b20.height == UILayoutContainerView:0x1c5d1440.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5e9f80 h=-&- v=-&- UIViewControllerWrapperView:0x1d0ba580.height == UINavigationTransitionView:0x1c5d2b20.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5e8610 h=-&- v=-&- UILayoutContainerView:0x1d096c30.height == UIViewControllerWrapperView:0x1d0ba580.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5e6ed0 h=-&- v=-&- UITransitionView:0x1d0999d0.height == UILayoutContainerView:0x1d096c30.height - 49>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5e5980 h=-&- v=-&- UIViewControllerWrapperView:0x1c5cb7a0.height == UITransitionView:0x1d0999d0.height - 20>",
    "<NSAutoresizingMaskLayoutConstraint:0x1d0c0710 h=--& v=--& UITableView:0x1db44600.midY ==>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5e4270 h=-&- v=-&- UIView:0x1c596de0.height == UIViewControllerWrapperView:0x1c5cb7a0.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5dcca0 h=--& v=--& UIView:0x1d0ae7e0.midY ==>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1c5ab4b0 V:[UIView:0x1d0ae7e0]-(0)-[UITableView:0x1db44600]>

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.
2013-02-22 00:17:48.283 MyApplication[6822: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) 
(
    "<NSLayoutConstraint:0x1c5ab510 V:[UITableView:0x1db44600]-(0)-|   (Names: '|':UIView:0x1c596de0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5ed510 h=-&- v=-&- UILayoutContainerView:0x1c5d1440.height == UIWindow:0x1c564480.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5ef2e0 h=--- v=--- V:[UIWindow:0x1c564480(480)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5eb9e0 h=-&- v=-&- UINavigationTransitionView:0x1c5d2b20.height == UILayoutContainerView:0x1c5d1440.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5e9f80 h=-&- v=-&- UIViewControllerWrapperView:0x1d0ba580.height == UINavigationTransitionView:0x1c5d2b20.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5e8610 h=-&- v=-&- UILayoutContainerView:0x1d096c30.height == UIViewControllerWrapperView:0x1d0ba580.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5e6ed0 h=-&- v=-&- UITransitionView:0x1d0999d0.height == UILayoutContainerView:0x1d096c30.height - 49>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5e5980 h=-&- v=-&- UIViewControllerWrapperView:0x1c5cb7a0.height == UITransitionView:0x1d0999d0.height - 20>",
    "<NSAutoresizingMaskLayoutConstraint:0x1d0c0710 h=--& v=--& UITableView:0x1db44600.midY ==>",
    "<NSAutoresizingMaskLayoutConstraint:0x1c5e4270 h=-&- v=-&- UIView:0x1c596de0.height == UIViewControllerWrapperView:0x1c5cb7a0.height>",
    "<NSAutoresizingMaskLayoutConstraint:0x1d0c0750 h=--& v=--& V:[UITableView:0x1db44600(0)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1c5ab510 V:[UITableView:0x1db44600]-(0)-|   (Names: '|':UIView:0x1c596de0 )>

感謝您閱讀整個(巨大的)帖子! 希望有人知道為什么它不起作用!

好的,我找到了答案......

我只需要為每個使用約束的視圖調用setTranslatesAutoresizingMaskIntoConstraints:

[profilHeader setTranslatesAutoresizingMaskIntoConstraints:NO];
[adTest setTranslatesAutoresizingMaskIntoConstraints:NO];
[_tableView setTranslatesAutoresizingMaskIntoConstraints:NO];

希望它可以幫助某人......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM