调用[super layoutSubviews]的正确方法是什么?

ppa*_*ica 11 sdk facebook objective-c ios

我刚刚在Facebook SDK for iOS中看到他们最后调用[super layoutSubviews];而不是在layoutSubviews方法的开头.

据我所知,我们应该始终把它作为第一行.可以以不同的方式实现它会导致任何意外的UI行为吗?

- (void)layoutSubviews
{
  CGSize size = self.bounds.size;
  CGSize longTitleSize = [self sizeThatFits:size title:[self _longLogInTitle]];
  NSString *title = (longTitleSize.width <= size.width ?
                     [self _longLogInTitle] :
                     [self _shortLogInTitle]);
  if (![title isEqualToString:[self titleForState:UIControlStateNormal]]) {
    [self setTitle:title forState:UIControlStateNormal];
  }

  [super layoutSubviews];
}
Run Code Online (Sandbox Code Playgroud)

ndm*_*iri 8

根据UIView类参考,

此方法的默认实现在iOS 5.1及更早版本中不执行任何操作.否则,默认实现使用您设置的任何约束来确定任何子视图的大小和位置.

因此,Facebook SDK示例应用程序[super layoutSubviews]在其实现结束时调用可能是最初为iOS 5.1之前的iOS版本构建的应用程序的工件.

对于更新版本的iOS,您应该[super layoutSubviews]在实现开始时调用.否则,超类将在您执行自定义布局后重新排列子视图,从而有效地忽略您的实现layoutSubviews().


chi*_*ure 5

查看代码,在[superlayoutSubviews]之前,它与框架无关。所以把它放在最后也可能效果很好。我猜编码员一定想要检查标题并根据某些规则修改标题,他认为每次调用layoutSubviews都是这样做的好机会,所以他把代码放在这里。