Czy można uzyskać rozmiar (szerokość i wysokość) określonego widoku? Na przykład mam widok pokazujący postęp:
<View ref='progressBar' style={{backgroundColor:'red',flex:this.state.progress}} />
Muszę znać rzeczywistą szerokość widoku, aby prawidłowo wyrównać inne widoki. czy to możliwe?
ios
react-native
Mateusz
źródło
źródło
View
inaczej w zależności od wymiarów. Nie rozumiem, jak mogę użyć funkcji widoku,onLayout
aby zmienić sposób wyświetlania widoku. Czy to nie prowadzi do nieskończonej pętli?onLayout
to przypadku nie ma to związku.To jedyna rzecz, która zadziałała dla mnie:
źródło
Zasadniczo, jeśli chcesz ustawić rozmiar i zmienić go, ustaw go na stan w układzie w następujący sposób:
Możesz stworzyć o wiele więcej wariantów tego, jak powinno być zmodyfikowane, używając tego w innym komponencie, który ma inny widok jako opakowanie i utworzyć wywołanie zwrotne onResponderRelease, które może przekazać lokalizację zdarzenia dotyku do stanu, który może być następnie przekazany do komponentu podrzędnego jako właściwość, która może przesłonić zaktualizowany stan onLayout przez umieszczenie
{[styles.View2, this.state.view2LayoutProps, this.props.touchEventTopLeft]}
i tak dalej.źródło
Możesz bezpośrednio skorzystać z
Dimensions
modułu i obliczyć rozmiary swoich widoków. Właściwie toDimensions
podaj główne rozmiary okien.Mam nadzieję, że ci pomogę!
Aktualizacja : Dzisiaj korzystam
StyleSheet
z natywnych z Flex rozmieszczeniem w widokach pomaga pisać czysty kod z eleganckimi rozwiązaniami układu w szerokich przypadkach zamiast obliczać rozmiary widoków ...Chociaż tworzenie niestandardowych komponentów siatki , które reagują na zdarzenia zmiany rozmiaru okna głównego, może dać dobre rozwiązanie w przypadku prostych komponentów widgetów
źródło
Może możesz użyć
measure
:źródło
NativeMethodsMixin
. Nieważne, co robię,measure
zawsze jest nieokreślone. Jakieś wskazówki?NativeMethodsMixin
z funkcji, która jest dostępna tylko dla niektórych elementów. Na przykładTouchableWithFeedback
ma funkcję pomiaru, ale zwykłaTouchable
nie. Spróbuj zmienić typ,View
którego używasz, pobierz referencję i sprawdź, czy element miary jest dostępny. Ja też się na to natknąłem.dla mnie ustawienie wymiarów na użycie% działa dla mnie
width:'100%'
źródło
Oto kod, aby uzyskać wymiary pełnego widoku urządzenia.
var windowSize = Dimensions.get("window");
Użyj tego w ten sposób:
width=windowSize.width,heigth=windowSize.width/0.565
źródło