2015-01-23 8 views
6

Nella mia app, ho impostato i vincoli di un UIView in un modo in cui l'altezza viene calcolata dalla sua larghezza utilizzando il vincolo di proporzioni. Funziona perfettamente su iOS8 con tutte le dimensioni dello schermo del dispositivo (3,5, 4, 4,7, 5,5), ma causa l'arresto anomalo dell'app su ogni dispositivo iOS7.interruzioni del vincolo delle proporzioni iOS su iOS7, funziona su iOS8

Suppongo che sia il vincolo di proporzioni, perché se lo sostituisco con un vincolo di altezza fissa, non si blocca più (ovviamente sembra male su alcuni dispositivi).

La traccia dello stack è estremamente lunga, quindi ne sto solo copiando alcune parti.

Grazie in anticipo per il vostro aiuto!

Objective: {objective 0x7f9d90da33c0: <750:4692, 251:2936, 250:367> + <251:-1>*0x7f9d90c06220.marker{id: 592} + <251:-1>*0x7f9d90c24420.marker{id: 599} + <251:-1>*0x7f9d90c25650.marker{id: 594} + <251:-1>*0x7f9d90c27ad0.marker{id: 597} + <750:-1>*0x7f9d90c3b270.marker{id: 483} + <250:-3.9875>*0x7f9d90c43e40.marker{id: 618} + <250:-3.9875>*0x7f9d90c43e90.marker{id: 620} + <750:-4>*0x7f9d90c442e0.marker{id: 479} + <251:1>*0x7f9d90c464b0.marker{id: 485} + <251:-1>*0x7f9d90c46bf0.marker{id: 504} + <251:-1>*0x7f9d90c46c90.marker{id: 508} + <251:-1>*0x7f9d90c46ce0.marker{id: 510} + <251:-1>*0x7f9d90c46d80.marker{id: 514} + <251:-2>*0x7f9d90c4aa60.marker{id: 623} + <251:-2>*0x7f9d90c4aab0.marker{id: 625} + <251:-2, 250:-3.9875>*0x7f9d90c4ab50.marker{id: 631} + <251:-2, 250:-3.9875>*0x7f9d90c4abf0.marker{id: 634} + <251:4, 250:3.9875>*0x7f9d90c4ac40.marker{id: 637} + <251:4, 250:3.9875>*0x7f9d90c4ac90.marker{id: 642} + <750:1, 251:1>*0x7f9d90c4c530.negError{id: 645} + <750:1, 251:1>*0x7f9d90c4cb20.posErrorMarker{id: 646} + <750:1, 251:1>*0x7f9d90c530f0.negError{id: 649} + <750:1, 251:1>*0x7f9d90c53150.negError{id: 651} + <750:1, 250:1>*0x7f9d90c53820.posErrorMarker{id: 652} + <750:1, 250:1>*0x7f9d90c538a0.posErrorMarker{id: 654} + <750:1, 250:1>*0x7f9d90c53fd0.posErrorMarker{id: 656} + <750:1, 250:1>*0x7f9d90c54070.posErrorMarker{id: 658} + <750:1, 251:1>*0x7f9d90c54650.negError{id: 661} + <750:1>*0x7f9d90c546b0.negError{id: 663} + <251:1>*0x7f9d90c546b0.posErrorMarker{id: 662} + <750:1>*0x7f9d90c55230.negError{id: 665} + <251:1>*0x7f9d90c55230.posErrorMarker{id: 664} + <750:1, 251:1>*0x7f9d90c552b0.negError{id: 667} + <750:1, 251:1>*0x7f9d90d34300.posErrorMarker{id: 916} + <750:1>*0x7f9d90de48a0.marker{id: 738} + <250:-1>*0x7f9d90de48f0.marker{id: 740} + <250:-1>*0x7f9d90de4940.marker{id: 744} + <750:1>*0x7f9d90de4990.marker{id: 745} + <750:1>*0x7f9d90de4c70.marker{id: 718} + <750:1>*0x7f9d90de4cc0.marker{id: 720} + <250:-1 

...

Integralization Adjustments: 
0x7f9d93042a90.marker{id: 532} [<NSLayoutConstraint:0x7f9d93042a90 UIView:0x7f9d9303d590.width == 1.50943*UIView:0x7f9d9303d590.height>] -> 0.132066 
0x7f9d93042c70.marker{id: 546} [<NSLayoutConstraint:0x7f9d93042c70 UIButton:0x7f9d90de27a0.height == UIButton:0x7f9d93018ab0.height>] -> 1.000000 
0x7f9d93042d60.marker{id: 552} [<NSLayoutConstraint:0x7f9d93042d60 UIButton:0x7f9d9303dbf0.width == UIButton:0x7f9d93018ab0.width>] -> -1.000000 
0x7f9d93042db0.marker{id: 554} [<NSLayoutConstraint:0x7f9d93042db0 UIButton:0x7f9d9303dbf0.height == UIButton:0x7f9d93033b40.height>] -> 1.000000 
0x7f9d93042ea0.marker{id: 562} [<NSLayoutConstraint:0x7f9d93042ea0 UIButton:0x7f9d93033b40.width == UIButton:0x7f9d9303c500.width>] -> -1.000000 
0x7f9d930431c0.marker{id: 581} [<NSLayoutConstraint:0x7f9d930431c0 UIButton:0x7f9d9303c500.height == UIButton:0x7f9d93045880.height>] -> 1.000000 

    Statistics: 
    195 rows. Variable counts: 
      1 -> 59 
      2 -> 28 
      3 -> 3 
      4 -> 7 
      5 -> 4 
      6 -> 3 
      7 -> 3 
      8 -> 4 
      9 -> 8 
     10 -> 10 
     11 -> 11 
     12 -> 10 
     13 -> 7 
     14 -> 2 
     15 -> 3 
     16 -> 10 
     17 -> 17 
     18 -> 6 
}: internal error. Cannot find an outgoing row head for incoming head UIView:0x7f9d930332a0.Height{id: 981}, which should never happen.' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000011284d495 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000011220699e objc_exception_throw + 43 
    2 CoreFoundation      0x000000011284d2ad +[NSException raise:format:] + 205 
    3 Foundation       0x0000000110dfb054 -[NSISEngine minimizeConstantInObjectiveRowWithHead:] + 178 
    4 Foundation       0x0000000110dfaf22 -[NSISEngine optimize] + 147 
    5 Foundation       0x0000000110f432e3 -[NSISEngine withBehaviors:performModifications:] + 192 
    6 UIKit        0x000000011126f889 -[UIView(Hierarchy) _postMovedFromSuperview:] + 321 
    7 UIKit        0x000000011126df42 __UIViewWasRemovedFromSuperview + 206 
    8 UIKit        0x000000011126db9e -[UIView(Hierarchy) removeFromSuperview] + 218 
    9 UIKit        0x0000000111330069 -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] + 320 
    10 UIKit        0x0000000111328fdd __49-[UINavigationController _startCustomTransition:]_block_invoke + 138 
    11 UIKit        0x000000011187ec2a -[_UIViewControllerTransitionContext completeTransition:] + 78 
    12 UIKit        0x0000000111211da4 __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke103 + 605 
    13 UIKit        0x00000001112746e8 -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 299 
    14 UIKit        0x000000011126068e -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 235 
    15 UIKit        0x0000000111260941 -[UIViewAnimationState animationDidStop:finished:] + 78 
    16 UIKit        0x000000011ef6d4b7 -[UIViewAnimationStateAccessibility(SafeCategory) animationDidStop:finished:] + 48 
    17 QuartzCore       0x0000000110ac9134 _ZN2CA5Layer23run_animation_callbacksEPv + 310 
    18 libdispatch.dylib     0x000000011327772d _dispatch_client_callout + 8 
    19 libdispatch.dylib     0x00000001132673fc _dispatch_main_queue_callback_4CF + 354 
    20 CoreFoundation      0x00000001128ab289 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9 
    21 CoreFoundation      0x00000001127f8854 __CFRunLoopRun + 1764 
    22 CoreFoundation      0x00000001127f7d83 CFRunLoopRunSpecific + 467 
    23 GraphicsServices     0x0000000114223f04 GSEventRunModal + 161 
    24 UIKit        0x000000011121be33 UIApplicationMain + 1010 
    25 Playchat       0x000000010fa89513 main + 115 
    26 libdyld.dylib      0x00000001134fa5c9 start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
+0

Il bug più orribile di sempre. – Konrad

risposta

1

ho risolto nel seguente modo:

Supponendo che il mio pannello avranno lo stesso aspetto su iPhone 4, 4s, 5, 5s poiché hanno lo stesso larghezza, quindi il loro rapporto aspetto avrà la stessa altezza. Ho aggiunto un vincolo di altezza alla stessa vista in cui ho aggiunto il vincolo di proporzioni a. Quindi, indipendentemente dalla versione di iOS, su questi dispositivi, la vista apparirà corretta con il vincolo di altezza.

iPhone6 ​​e 6+ funzionano solo su iOS8 o versioni successive, dove il vincolo del rapporto di aspetto non ha esito negativo, semplicemente elimino il vincolo di altezza se la versione di iOS è 8 o superiore, altrimenti elimino il vincolo di proporzioni.

È lontano dall'essere elegante, ma risolve il problema in modo semplice.

+0

Forse puoi presentare una segnalazione di bug ad Apple? ("Questo non dovrebbe mai accadere", sembra che il sistema operativo abbia fatto qualcosa di sbagliato lì?) –

0

Ho avuto questo arresto anomalo su iOS7 quando avevo una combinazione di proporzioni, altezza uguale al contenitore e zero spaziatura superiore e inferiore ai vincoli del contenitore. L'altezza uguale al vincolo del contenitore era ridondante poiché era vincolata alla parte superiore e inferiore del contenitore, quindi l'ho rimosso e l'arresto si è arrestato. Deve essere un bug nel sistema operativo.

0

In effetti, questo deve essere un errore di sistema operativo (iOS 7). Ho trascorso alcuni giorni a eseguire il debug del collateraling completamente (nota: NESSUNA eccezione NSLayout). Anch'io sono quasi crollato.

Era TUTTO dovuto all'utilizzo di alcune combinazioni di vincoli insieme ai vincoli di proporzioni.

Sto risolvendo questo problema con l'interfaccia utente ridisegnata ... Dolore.

10

Questo è un bug fastidioso, mi è costato un sacco di ore pure. Ho avuto lo stesso identico problema, l'app funzionava perfettamente su iOS 8 ma si è bloccata in iOS 7.1. Il problema era un vincolo di proporzioni in una vista di scorrimento. Dopo aver provato un sacco di cose diverse, questo finalmente ha risolto il problema:

L'arresto anomalo sembra essere il risultato di un calcolo in virgola mobile che non riesce a un certo punto. Nel mio caso, avevo definito un rapporto aspetto di 16: 9 o piuttosto 9:16, che ammonta a 0,5625. Cambiando il moltiplicatore da 0,5625 a 0,5624 risolto il problema, non si sono più verificati arresti anomali da allora.

+0

Lol at solution :-D. In ogni caso sto impazzendo per risolvere i problemi su iOS7. – sabiland

+1

lol si, è stato del tutto ridicolo, ma era l'unica cosa che effettivamente lo ha risolto ... ho provato tutto ciò che è stato suggerito qui e su post simili, ma nulla ha aiutato ... sono sicuro che i miei vincoli sono impostati correttamente .. La cosa divertente è che .. la larghezza e l'altezza del vincolo hanno alleviato il problema un po ', l'app sembra aver avuto un incidente solo la metà del solito ... ma non ci si aspetta di cambiare il moltiplicatore veramente risolto;) –

+0

Hai cambiato il moltiplicatore in un valore "fisso" per ciascuno dei tuoi vincoli AP? Come in, cambiato da 9:16 a 0.5624? Perché 0,5624 e non 0,5625, quest'ultimo non ha funzionato? – Konrad

0

Ho questo problema con NSLayoutConstraint e moltiplicatore su iOS 7. Funziona perfettamente su iOS 8.

Sto usando il moltiplicatore con valore 0.2 e causa errori!

NSLayoutConstraint(item: BT_Facebook, 
       attribute: NSLayoutAttribute.Width, 
       relatedBy: .Equal, 
       toItem: nil, 
       attribute: .Width, 
      multiplier: 0.2, 
       constant: sizeBtRedeSociais) 

La soluzione è utilizzare la dimensione dello schermo e non le percentuali.

var sizeBtRedeSociais = UIScreen.mainScreen().bounds.width/5 
var BT_FacebookWidth = NSLayoutConstraint(item: BT_Facebook, attribute: NSLayoutAttribute.Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: sizeBtRedeSociais) 
var BT_TwitterWidth = NSLayoutConstraint(item: BT_Twitter, attribute: NSLayoutAttribute.Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: sizeBtRedeSociais) 
var BT_InstagramWidth = NSLayoutConstraint(item: BT_Instagram, attribute: NSLayoutAttribute.Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: sizeBtRedeSociais) 
var BT_GoogleWidth = NSLayoutConstraint(item: BT_Google, attribute: NSLayoutAttribute.Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: sizeBtRedeSociais) 
var BT_YoutubeWidth = NSLayoutConstraint(item: BT_Youtube, attribute: NSLayoutAttribute.Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: sizeBtRedeSociais) 
0

ho risolto che non si imposta il rapporto stesso. È necessario impostare uguale al suo contenitore Ma meglio è necessario impostare il vincolo di altezza seguire iPhone 6. È necessario limitare l'uscita nella classe. In viewDidLoad è necessario moltiplicatore con DISPLAY_SCALE

DISPLAY_SCALE = UIScreen.mainScreen().bounds.width/375 

// 375 è la larghezza di iPhone 6.

Perché è necessario farlo? Penso che ritardo iOS7 quando calcolatrice il nostro vincolo. E ha torto quando mostra

Problemi correlati