2010-01-27 13 views
5

Ho un UIViewController che è inizializzato con una cornice corretta, tuttavia da qualche parte nel mio codice il telaio viene stravolto e ho difficoltà a scoprire dove.Come rilevare quando un UIView ha cambiato dimensione?

In situazioni come questa di solito è utile per watch una variabile nel debugger, tuttavia non ho modo di accedere alla proprietà controller-> view-> frame nella mia vista variabile, poiché non è una variabile, è una proprietà (abbastanza sorprendentemente)

Drillare nella visualizzazione UIV nel display delle variabili mostra alcune cose ma nulla che possa riguardare il frame, ho pensato che forse sarebbe in layer ma non lo è.

C'è un modo per controllare le modifiche in un'API privata? Immagino di no, dal momento che le variabili sono essenzialmente 'nascoste' e quindi non è possibile specificare esattamente cosa fare a watch.

In alternativa, quale altro approccio potrei usare? Ho già provato la creazione di sottoclassi di UIView, impostando la vista di UIViewController in modo che punti a questa sottoclasse e interrompendo il metodo setFrame, ma non sembra funzionare.

MODIFICA: la sottoclasse UIView metodo DID lavoro, ho appena dovuto impostare la vista per puntare alla mia sottoclasse di prova in viewDidLoad e non al metodo init. Lasciando aperta questa domanda non sono sicuro se questo è il modo migliore per affrontare questo tipo di problema ...

risposta

0

È possibile creare un ivar, view2 e appena assegnato alla visualizzazione nel metodo loadView. Questo dovrebbe consentire di guardarlo come una variabile normale.

5

sottoclasse tua la vista che si desidera tenere traccia e riscrivere il metodo SETFRAME:

@implementation MyTableView 

- (void)setFrame:(CGRect)frame; 
{ 
    NSLog(@"%@", frame); 
    [super setFrame:frame]; 
} 

@end 

quindi utilizzare il debugger per aggiungere un punto di interruzione per essa e verificare quando viene chiamato. Alla fine, vedrai quando il frame viene cambiato e da dove viene il cambiamento.

+0

yea ho già parlato di questo nella domanda ... – Sam

+0

Sam, dovrebbe funzionare. Se viene modificato il frame, è necessario chiamare questo metodo. Se non è forse il problema è da qualche altra parte a monte. –

+6

Questo potrebbe non essere richiamato quando si utilizzano i vincoli di impaginazione automatica. – kpozin

Problemi correlati