在iOS7中的 - (void)layoutSubviews中的递归但在iOS8中工作正常

时间:2015-06-02 06:08:09

标签: ios objective-c

我陷入了一个奇怪的问题。 我有一个视图,我已添加autolayout。在该视图中,很少有标签是UILabel的子类。 在该子类内部我重写函数- (void)layoutSubviews(函数本身为空) 现在问题是有时多次调用- (void)layoutSubviews函数。

相同的堆栈跟踪如下。

`#1 0x00824964 in -[UIView(CALayerDelegate) layoutSublayersOfLayer:] ()
 #2 0x01f4682b in -[NSObject performSelector:withObject:] ()
 #3 0x01c1045a in -[CALayer layoutSublayers] ()
 #4 0x01c04244 in CA::Layer::layout_if_needed(CA::Transaction*) ()
 #5 0x01c040b0 in CA::Layer::layout_and_display_if_needed(CA::Transaction*) ()
 #6 0x01b6a7fa in CA::Context::commit_transaction(CA::Transaction*) ()
 #7 0x01b6bb85 in CA::Transaction::commit() ()
 #8 0x01b6c258 in CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) ()
 #9 0x0296436e in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
#10 0x029642bf in __CFRunLoopDoObservers ()
#11 0x02942254 in __CFRunLoopRun ()
#12 0x029419d3 in CFRunLoopRunSpecific ()
#13 0x029417eb in CFRunLoopRunInMode ()
#14 0x04b785ee in GSEventRunModal ()
#15 0x04b7842b in GSEventRun ()
#16 0x007b5f9b in UIApplicationMain () `

现在我无法理解它被调用的位置,因为堆栈跟踪没有显示任何内容。 任何人都可以帮助在这里追踪递归的起源。

编辑: - 似乎是autolayouts的问题。如果我从视图中删除自动布局,则不再存在子布局问题。任何有关为何发生这种情况的建议。

1 个答案:

答案 0 :(得分:0)

这似乎是autolayout的一个问题。 每当我在视图上使用纵横比自动布局时,问题就出现了。 从自动布局中删除宽高比,问题就解决了。