2017-06-25 14 views
5

मैं प्रतिक्रिया मूल आईओएस के लिए एक कस्टम दृश्य लिख रहा हूँ।प्रतिक्रियात्मक मूल को कैसे सूचित किया जाए कि कस्टम दृश्य का आकार बदल गया है?

मूल रूप से मुझे जितना संभव हो सके टेक्स्ट को बनाना होगा (वर्तमान दृश्य के दृश्य के आधार पर)। मैंने इसे reactSetFrame ओवरराइड करके और फ्रेम को बदलकर किया है। केवल मुद्दा दृश्य की स्थिति गलत है कि है, यहाँ एक स्क्रीनशॉट:

overlapping views

ऐसा लगता है "लेआउट प्रबंधक" देशी प्रतिक्रिया के बारे में सोचती है कि उस दृश्य दिखाई देते हैं ऊंचाई 0.

यहाँ कोड:

- (void)reactSetFrame:(CGRect)frame { 
    [super reactSetFrame:frame]; 

    NSLog(@"react set frame %@", NSStringFromCGRect(frame)); 

    [self fitText:self.text]; 
} 

- (void)fitText:(NSString *)text { 
    // ... get the correct font size and expected size  
    [self setFont:font]; 

    CGRect newFrame = self.frame; 

    newFrame.size.height = expectedLabelSize.height; 

    NSLog(@"new frame is %@", NSStringFromCGRect(newFrame)); 

    self.frame = newFrame; 
} 

मूल रूप से जब फ्रेम परिवर्तन मैं पाठ कि पारित किया गया था के आधार पर सही आयामों के साथ फ्रेम को अद्यतन करने कर रहा हूँ।

2017-06-25 16:43:16.434 ABC[44836:6551225] react set frame {{0, 0}, {375, 0}} 
2017-06-25 16:43:16.435 ABC[44836:6551225] new frame is {{0, 0}, {375, 69.197000000000017}} 
2017-06-25 16:43:16.435 ABC[44836:6551225] react set frame {{0, 0}, {375, 0}} 
2017-06-25 16:43:16.436 ABC[44836:6551225] new frame is {{0, 0}, {375, 85.996999999999986}} 

मैं फिर से नया फ्रेम के साथ reactSetFrame बुला की कोशिश की है, लेकिन यह काम नहीं कर रहा:

लॉग उत्पादन इस है। क्या प्रतिक्रियात्मक मूल को बताने का कोई तरीका है कि दृश्य का आकार बदल गया है?

+0

आप जावास्क्रिप्ट के मूल निवासी से डेटा भेजने के लिए चाहते हैं:

तब मैं उपाय समारोह है कि योग के द्वारा प्रयोग किया जाता है सही ऊंचाई पाने के लिए के कार्यान्वयन बदलना पड़ा? – Codesingh

+0

@ कोडिंगिंग वास्तव में नहीं, मुझे "लेआउट मैनेजर" को देखने के वास्तविक आकार को जानने की ज़रूरत है :) – patrick

उत्तर

3

तो मुझे अंत में ऐसा करने का एक तरीका मिला; लेआउट जानकारी प्राप्त करने के लिए देशी रूप से मूल रूप से देशी दृश्य का उपयोग करते हैं। तो मैं अपने प्रबंधक

- (RCTShadowView *)shadowView 
{ 
    return [FitTextShadowView new]; 
} 

जो मूल रूप से कह रहा है मेरी घटक के लिए छाया दृश्य क्या करने के लिए इस कोड को जोड़ना था।

@implementation FitTextShadowView 

static YGSize RCTMeasure(YGNodeRef node, float width, YGMeasureMode widthMode, float height, YGMeasureMode heightMode) 
{ 
    FitTextShadowView *shadowText = (__bridge FitTextShadowView *)YGNodeGetContext(node); 
    YGSize result; 

    result.width = width; 
    result.height = [shadowText getHeight:shadowText.text thatFits:width]; 
    return result; 
} 

- (instancetype)init 
{ 
    if ((self = [super init])) { 
    YGNodeSetMeasureFunc(self.yogaNode, RCTMeasure); 
    } 
    return self; 
} 

@end 
+0

आपने अपने कस्टम छाया दृश्य के साथ 'टेक्स्ट' को कैसे जोड़ा? – Tres

+0

@Tres इसे जांचें: https://facebook.github.io/react-native/docs/native-components-ios.html#properties – patrick

संबंधित मुद्दे