我有一个自定义UITableViewCell,左侧有一个标签,右侧是UISegmentedControl
。我刚刚习惯在代码中使用自动布局,这就是我在自定义单元格中使用的内容(使用UIView+AutoLayout):
-(void)updateConstraints
{
self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
self.segmentedControl.translatesAutoresizingMaskIntoConstraints = NO;
[self.titleLabel pinToSuperviewEdges:JRTViewPinLeftEdge inset:DB_AUTOLAYOUT_DEFAULT_INSET];
[self.titleLabel centerInContainerOnAxis:NSLayoutAttributeCenterY];
[self.segmentedControl pinToSuperviewEdges:JRTViewPinRightEdge inset:DB_AUTOLAYOUT_DEFAULT_INSET];
[self.segmentedControl pinAttribute:NSLayoutAttributeBaseline
toAttribute:NSLayoutAttributeBaseline
ofItem:self.titleLabel];
[super updateConstraints];
}
我的问题是分段控件的第一个标题始终未对齐:
这就是iOS 6上的样子:
在iOS 7上:
所以第一个问题是:我该如何解决这个问题?
其他,切线问题:我是否通过在updateConstraints
中添加自动布局代码来做正确的事情,或者我应该只应用约束一次?
答案 0 :(得分:7)
简而言之,来自UIView.h
如果在-updateConstraints中设置所有约束,如果没有人约束,你甚至可能永远不会收到updateConstraints。要修复此鸡和蛋问题,请覆盖此方法以返回YES。
+ (BOOL)requiresConstraintBasedLayout {
return YES;
}