【发布时间】:2014-09-01 19:15:24
【问题描述】:
我的故事板中有一个表视图,它的类设置为我的UITableView 子类,名为SPSExplanationTableView。在 Interface Builder 中,此 tableview 上没有设置任何约束。
我正在尝试以编程方式创建一个 UIView,它显示在 tableview 的前面——which I know how to do(博客文章链接)——但它是使用自动布局来调整大小和定位的。这是我的代码:
#import "SPSExplanationTableView.h"
@interface SPSExplanationTableView()
@property (nonatomic, strong) UIView *explanationView;
@end
@implementation SPSExplanationTableView
- (void)awakeFromNib
{
[super awakeFromNib];
self.explanationView = [[UIView alloc] init];
self.explanationView.translatesAutoresizingMaskIntoConstraints = NO;
self.explanationView.backgroundColor = [UIColor blueColor];
[self addSubview:self.explanationView];
[self bringSubviewToFront:self.explanationView];
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.explanationView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0f constant:150.0f];
[self.explanationView addConstraint:heightConstraint];
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.explanationView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0f constant:200.0f];
[self.explanationView addConstraint:widthConstraint];
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:self.explanationView
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeCenterY
multiplier:1.0f constant:0.0f];
[self addConstraint:topConstraint];
NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:self.explanationView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeCenterX
multiplier:1.0f constant:0.0f];
[self addConstraint:leftConstraint];
@end
当我运行应用程序时,它会因以下断言失败而崩溃:
*** -[SPSExplanationTableView layoutSublayersOfLayer:] 中的断言失败, /SourceCache/UIKit_Sim/UIKit-2935.137/UIView.m:8794 *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“自动布局仍然 执行 -layoutSubviews 后需要。 SPSExplanationTableView 的 -layoutSubviews 的实现需要调用 super.'
从字面上理解消息并覆盖 layoutSubviews 没有任何效果,即我仍然遇到同样的崩溃。
- (void)layoutSubviews
{
[super layoutSubviews];
}
实现我想要实现的目标的正确方法是什么?
对于 Aubada Taljo,这是 Interface Builder 中的表格视图:
更新:我最终通过不使用自动布局解决了这个问题!我在我的 SPSExplanationTableView 类中覆盖了 layoutSubviews 方法,并将 explainView 的 center 属性设置为自身边界的中心,并对 y 轴位置进行了一些微调,使其看起来像我想要的那样。
【问题讨论】:
标签: ios objective-c autolayout