以编程方式将 UIButton 添加到 UITableView 错误点
Posted
技术标签:
【中文标题】以编程方式将 UIButton 添加到 UITableView 错误点【英文标题】:Adding UIButton To UITableView Programmatically Wrong Spot 【发布时间】:2016-09-30 22:32:34 【问题描述】:我正在尝试将 UIButton 添加到 TableView,它位于表格视图的右下角,距离右边缘 20,距离底部 20。但是,它最终将按钮粘贴在左上角。我做错了什么?
UIButton *goToTop = [UIButton buttonWithType:UIButtonTypeCustom];
[goToTop setImage:redGo forState:UIControlStateNormal];
[goToTop addTarget:self action:@selector(beginCampaign) forControlEvents:UIControlEventTouchUpInside];
[goToTop setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[goToTop.layer setBorderColor:[[UIColor redColor] CGColor]];
[self.tableView addSubview:goToTop];
goToTop.translatesAutoresizingMaskIntoConstraints = NO;
/* Leading space to superview */
NSLayoutConstraint *leftButtonXConstraint = [NSLayoutConstraint
constraintWithItem:goToTop attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual toItem:self.tableView attribute:
NSLayoutAttributeLeft multiplier:1.0 constant:20];
/* Top space to superview Y*/
NSLayoutConstraint *leftButtonYConstraint = [NSLayoutConstraint
constraintWithItem:goToTop attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual toItem:self.tableView attribute:
NSLayoutAttributeTop multiplier:1.0f constant:20];
/* Fixed width */
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:goToTop
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:60];
/* Fixed Height */
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:goToTop
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:60];
/* 4. Add the constraints to button's superview*/
[self.tableView addConstraints:@[leftButtonXConstraint, leftButtonYConstraint, widthConstraint, heightConstraint]];
这是我想要的:
它是这样显示的:
【问题讨论】:
你想要按钮在tableview里面还是tableview外面?您使用的是视图控制器还是 tableviewcontroller?您应该使用前导和尾随而不是左/右属性 @Paulw11 我想要 TableView 中的按钮,tableview 在 navigationController 中 那么你应该使用leading=leading和bottom=bottom,而不是left=right和top=bottom。您的视图控制器可能在导航控制器中,但它是直接 UIViewController 子类还是 UITableViewController 子类? IE。什么是根视图? uiview 还是 tableview? @Paulw11 应用程序的完整层次结构是这样的。根视图是一个 tabBarController,有问题的视图以 NavigationController 开头,其中有一个 ViewController 从它自己的 nib 加载,它是一个 TableViewController。 我刚刚测试了这个。您不能将子视图添加到 UITableView。您将需要使用视图控制器并将 tableview 添加到其中,然后您可以将按钮添加到根视图并设置其相对于 tableview 的约束 【参考方案1】:您已将约束设置在表格视图的左上角而不是右下角。 改变这个:
/* Leading space to superview */
NSLayoutConstraint *leftButtonXConstraint = [NSLayoutConstraint
constraintWithItem:goToTop attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual toItem:self.tableView attribute:
NSLayoutAttributeLeft multiplier:1.0 constant:20];
/* Top space to superview Y*/
NSLayoutConstraint *leftButtonYConstraint = [NSLayoutConstraint
constraintWithItem:goToTop attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual toItem:self.tableView attribute:
NSLayoutAttributeTop multiplier:1.0f constant:20];
到这里:
/* Leading space to superview */
NSLayoutConstraint *leftButtonXConstraint = [NSLayoutConstraint
constraintWithItem:goToTop attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual toItem:self.tableView attribute:
NSLayoutAttributeRight multiplier:1.0 constant:20];
/* Top space to superview Y*/
NSLayoutConstraint *leftButtonYConstraint = [NSLayoutConstraint
constraintWithItem:goToTop attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual toItem:self.tableView attribute:
NSLayoutAttributeBottom multiplier:1.0f constant:20];
【讨论】:
以上是关于以编程方式将 UIButton 添加到 UITableView 错误点的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式将 UIButton 添加到 rootview,我做错了啥?
以编程方式将 UIButton 添加到 UITableView 但按钮不显示
如何以编程方式将 UIButton 添加到 UIToolBar?
以编程方式将 UIButton 添加到带有情节提要的自定义 ViewController