2010-12-07 8 views
9

Tengo un UIScrollView que contiene un UIView personalizado. Dentro de la personalizada UIView, me gustaría saber el rectángulo en el que está visible (es decir, no recortado).Obtener un rectángulo visible de UIView

La solución quick-n-dirty es hacer que el UIView personalizado asuma que el padre es un UIScrollView y obtener el tamaño del contenido a través de él, pero estoy buscando una mejor solución que no implique hacer tales suposiciones.

Respuesta

2

Ayudaría si pudiera dar más información sobre lo que está tratando de lograr.

Si usted quiere saber el tamaño de la super vista se puede hacer esto:

CGRect superFrame = [self superview].frame; 
+0

No se que no va a funcionar. Lo que estoy buscando es el rect visible de la vista, no el marco completo de la vista. Por ejemplo, si una parte de UIView A se superpone con otra UIView B, ¿cuál es el área visible de UIView A que es visible para el usuario? –

17

Esto debería hacer el truco

CGRect visibleRect = CGRectIntersection(self.frame, superview.bounds); 

uso que en el UIView y debe obtener la rectángulo (si lo hay) que representa la sección visible de esa vista en su superview (The UIScrollView). Supongo que no existe una visión entre ellos en la jerarquía, pero si lo hay, manipular el código debería ser trivial.

Espero que pueda ayudar!

+1

¿No debería ser 'superview.bounds' ya que el marco de la supervista está en el espacio de coordenadas de su superview? –

+0

@ Awesome-o: Tiene razón. Mi código original suponía que la supervista llenaba toda la pantalla (origen 0, 0), pero los límites serían más seguros de usar en caso de que no lo fueran. Respuesta actualizada – foslock

1

Swift 3

extension UIView { 
    var visibleRect: CGRect? { 
     guard let superview = superview else { return nil } 
     return frame.intersection(superview.bounds) 
    } 
} 
Cuestiones relacionadas