UITabView中tableHeaderView和tableF

2018-12-29  本文已影响0人  夬大爷

tableHeaderView 在使用frame布局完成后使用mansory 来相对布局操作界面时就会出现


The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2018-12-29 16:52:18.563718+0800 TuiTui[22592:4888976] [LayoutConstraints] 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. 
(
    "<MASLayoutConstraint:0x281ff3120 UIButton:0x102f06ab0.left == UIView:0x102f068d0.left + 30>",
    "<MASLayoutConstraint:0x281ff33c0 UIButton:0x102f06ab0.right == UIView:0x102f068d0.right - 30>",
    "<NSLayoutConstraint:0x2818b70c0 UIView:0x102f068d0.width == 0>"
)

Will attempt to recover by breaking constraint 
<MASLayoutConstraint:0x281ff33c0 UIButton:0x102f06ab0.right == UIView:0x102f068d0.right - 30>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
2018-12-29 16:52:19.391112+0800 TuiTui[22592:4888976] [NetworkInfo] Could not successfully update network info for descriptor <CTServiceDescriptor 0x283baca80, domain=1, instance=2> during initialization.

错误的

   self.tabV.tableHeaderView = self.headV;

    _submitBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [_submitBtn setTitle:@"xxx" forState:UIControlStateNormal];
    [_submitBtn setTitle:@"xx" forState:UIControlStateSelected];
    [_footV addSubview:_submitBtn];
    WS_ViewRadius(_submitBtn,23.4);
    [_submitBtn makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.footV).offset(30);
        make.right.equalTo(self.footV).offset(-30);
        make.height.equalTo(47);
        make.centerY.equalTo(self.footV);
    }];

正确的

  self.tabV.tableHeaderView = self.headV;
    [self.headV setNeedsLayout];
    [self.headV layoutIfNeeded];
    _submitBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [_submitBtn setTitle:@"xxx" forState:UIControlStateNormal];
    [_submitBtn setTitle:@"xx" forState:UIControlStateSelected];
    [_footV addSubview:_submitBtn];
    WS_ViewRadius(_submitBtn,23.4);
    [_submitBtn makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.footV).offset(30);
        make.right.equalTo(self.footV).offset(-30);
        make.height.equalTo(47);
        make.centerY.equalTo(self.footV);
    }];

如果还有一个tableFooterView 要添加
错误的如下:

        self.tabV.tableHeaderView = self.headV;
        [self.headV setNeedsLayout];
        [self.headV layoutIfNeeded];
        [self addTopView];//添加headV的子视图依赖headV的left或right
        
        self.tabV.tableFooterView = self.footV;
        [self.footV setNeedsLayout];
        [self.footV layoutIfNeeded];
        [self addFootView];//添加footV的子视图依赖footV的left或right

正确的


 self.tabV.tableHeaderView = self.headV;
 self.tabV.tableFooterView = self.footV;
 [self.tabV setNeedsLayout];
 [self.tabV layoutIfNeeded];
 [self addTopView];
 [self addFootView];

原因是:
1、tabV设置tableHeaderView是不会去重新刷新一下相对布局,需要手动强制刷新。
2、第二种刷新完tableHeaderView,再去刷新tableFooterView就会失效,需要手动强制刷新tableView.

上一篇下一篇

猜你喜欢

热点阅读