UISegmentedControl与AutoLayout错位标题

时间:2014-04-25 14:09:07

标签: ios objective-c autolayout uisegmentedcontrol

我有一个自定义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上的样子:enter image description here

在iOS 7上:enter image description here

所以第一个问题是:我该如何解决这个问题?

其他,切线问题:我是否通过在updateConstraints中添加自动布局代码来做正确的事情,或者我应该只应用约束一次?

1 个答案:

答案 0 :(得分:7)

简而言之,来自UIView.h

如果在-updateConstraints中设置所有约束,如果没有人约束,你甚至可能永远不会收到updateConstraints。要修复此鸡和蛋问题,请覆盖此方法以返回YES。

+ (BOOL)requiresConstraintBasedLayout {
        return YES; 
}