【发布时间】:2015-09-29 14:47:25
【问题描述】:
我刚刚在 iOS 版 Facebook SDK 中看到他们在末尾调用 [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];
}
【问题讨论】:
-
“据我所知,我们应该始终将其作为第一行”您是如何“知道”这一点的?
-
@matt,我相信这是 iOS 开发者社区使用的约定,因为超类可能有一些默认/常规设置,可能会影响我们不应用的自定义布局(如果我们在方法结束)。类似于在构造函数/初始化器中调用 super 作为第一行。
-
“超类可能有一些默认/常规设置,可能会影响我们的自定义布局不被应用(如果我们在方法结束时这样做)。”是的,这绝对是真的。但这与“应该总是”不同。
标签: ios objective-c facebook sdk