我对自动布局的理解是,它采用superview的大小,并根据约束和内部大小计算子视图的位置。
有没有办法逆转这个过程?我想根据约束和内部大小来调整superview的大小。实现这一目标的最简单方法是什么?
我有用Xcode设计的视图,我用它作为UITableView
的标题。该视图包含一个标签和一个按钮。标签的大小因数据而异。根据约束,标签会成功地按下按钮,或者如果按钮和superview的底部之间存在约束,则会压缩标签。
我发现了一些类似的问题,但他们没有好的和简单的答案。
发布于 2013-08-08 13:04:23
您可以通过创建约束并通过接口构建器连接它来完成此操作
请参阅说明:Auto_Layout_Constraints_in_Interface_Builder
raywenderlich beginning-auto-layout
AutolayoutPG Articles constraint Fundamentals
@interface ViewController : UIViewController {
IBOutlet NSLayoutConstraint *leadingSpaceConstraint;
IBOutlet NSLayoutConstraint *topSpaceConstraint;
}
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *leadingSpaceConstraint;
将此约束出口与您的子视图约束连接,或者也连接超级视图约束,并根据您的需求进行设置,如下所示
self.leadingSpaceConstraint.constant = 10.0;//whatever you want to assign
我希望这能澄清这一点。
发布于 2013-08-08 13:36:21
这可以在较大的subview
中的普通UIView
上完成,但不能自动在headerViews
上工作。headerView
的高度由tableView:heightForHeaderInSection:
返回的内容决定,因此您必须根据UILabel
的height
加上UIButton
和所需的任何padding
的空间来计算UILabel
。你需要这样做:
-(CGFloat)tableView:(UITableView *)tableView
heightForHeaderInSection:(NSInteger)section {
NSString *s = self.headeString[indexPath.section];
CGSize size = [s sizeWithFont:[UIFont systemFontOfSize:17]
constrainedToSize:CGSizeMake(281, CGFLOAT_MAX)
lineBreakMode:NSLineBreakByWordWrapping];
return size.height + 60;
}
在这里,headerString
是您想要填充UILabel
的任何字符串,281数字是UILabel
的width
(与Interface Builder
中的设置相同)
https://stackoverflow.com/questions/18118021
复制相似问题