Ios 在子视图中居中显示UITableView

Ios 在子视图中居中显示UITableView,ios,objective-c,uitableview,cocoa-touch,subview,Ios,Objective C,Uitableview,Cocoa Touch,Subview,如果单元格总数*行高

如果单元格总数*行高<表格视图的高度,我最终会尝试在UITableView中垂直居中表格视图单元格

我的问题是,每当我尝试引用tableview高度时,当添加到其superview时,应调整其大小。它返回在Interface Builder中定义的视图的原始高度

以下是将子视图添加到tableView的方法:

- (void)addMissonListView {
    missionView = [BSMissionListView loadMissionView:YES];
    BSList *list = (BSList *)self.dataModel;
    missionView.missionList = list.arrayMissions;
    missionView.delegate = self;
    missionView.heightofSuperView = [NSNumber numberWithFloat:viewBottomContainer.frame.size.height];
    [viewBottomContainer addSubview:missionView];


    [viewBottomContainer setTranslatesAutoresizingMaskIntoConstraints:NO];
    [BSUtility setConstraintsOnView:viewBottomContainer relativeTo:missionView withConstant:0];   
}
这是setsConstraintsOnView方法,称为:

+ (void)setConstraintsOnView:(UIView *)superView relativeTo:(UIView *)subView withConstant:(int)constant
{
    [subView setTranslatesAutoresizingMaskIntoConstraints:NO];

    [superView addConstraint:[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:superView attribute:NSLayoutAttributeBottom multiplier:1 constant:constant]];

    [superView addConstraint:[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:superView attribute:NSLayoutAttributeTop multiplier:1 constant:constant]];

    [superView addConstraint:[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:superView attribute:NSLayoutAttributeRight multiplier:1 constant:constant]];

    [superView addConstraint:[NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:superView attribute:NSLayoutAttributeLeft multiplier:1 constant:constant]];
}
子视图由UIView内部的tableView组成。在Interface Builder中,UIView的大小为320 X 586,tableView的大小为310 X 558。 viewBottomContainer的IB大小为320 x 408 我试图在configureGUI方法中获取有关视图和tableView高度的信息。一旦成功,我将把它传递给另一个方法,在TableView中创建contentOffset。但是NSLog会继续返回原始值,而不是大小调整后的值

以下是BSMissionListView类中的方法:

- (void)awakeFromNib {
    [super awakeFromNib];

    [self configureGUI];
}

- (void)configureGUI {
    [super configureGUI];

    NSLog(@"Bounds height of the View is %f",self.bounds.size.height);
    NSLog(@"Bounds height of the tableView is %f",self.tableViewMissionList.bounds.size.height);
    [self setBackgroundColor:[UIColor clearColor]];
}

如果有帮助的话,我很乐意发布更多的代码。谢谢大家!

我通过加载tableView nib的方法传入tableView的superView高度,从而解决了这个问题

-我在方法中添加了一个CGFloat变量,该方法在BSMissionListView类中加载nib

-我传入了viewBottomContainer的height,然后用它在新修改的方法中设置heightOfSuperView值

-heightOfSuperView的值用于计算TableView的contentInset,使其在superView中居中

感谢@Alex Renyolds帮助我

- (void)addMissonListView {
[viewBottomContainer setNeedsLayout];
[viewBottomContainer layoutIfNeeded];
[viewBottomContainer setTranslatesAutoresizingMaskIntoConstraints:NO];
NSLog(@"Height of bottomViewContrainer: %f", viewBottomContainer.bounds.size.height);
BSList *list = (BSList *)self.dataModel;
missionView = [BSMissionListView loadMissionView:YES heightOfSuperView:viewBottomContainer.bounds.size.height listArray:list.arrayMissions];

missionView.delegate = self;
[viewBottomContainer addSubview:missionView];
[viewBottomContainer setTranslatesAutoresizingMaskIntoConstraints:NO];
[BSUtility setConstraintsOnView:viewBottomContainer relativeTo:missionView withConstant:0];

}
特派员

+ (BSMissionListView *)loadMissionView:(BOOL)isEditable heightOfSuperView:(CGFloat)height listArray:(NSMutableArray *)list {
BSMissionListView *missionListView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([BSMissionListView class]) owner:nil options:nil] lastObject];
missionListView.missionList = list;
missionListView.isEditable = isEditable;
missionListView.heightofSuperView = (height- 49);
[missionListView configureGUI];

return missionListView;

}

您是否将TranslatesAutoResizengMacintoConstraints设置为NO on missionView?我没有在BSMissionViewList中进行设置。如果要对其应用约束,则需要关闭translates,否则将无法应用约束。若要澄清子视图和表视图,请调整其大小并按预期运行。我似乎不明白为什么一旦通过SetConstraintsOnView调整了CGRect属性的大小,我就无法访问它们。您是否调用[superview LayoutFneeded]来应用这些约束?