允许本机iOS组件在React Native

时间:2015-08-06 17:06:12

标签: react-native

我正在包装一个希望控制自己高度的现有iOS组件。因此组件将修改其框架属性,但当然RN会根据应用的样式进行布局,因此忽略它。我正在寻找一种很好的方法来允许组件在React Native布局中自行调整大小。

我可以覆盖setFrame方法并通过事件将新高度传递回JS代码,然后设置高度样式,但似乎必须有一种更简单的方法!

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

看起来每次高度变化时都要举办活动。我通过继承现有组件并重写setFrame和setReactFrame(来自React UIKit类别)来做到这一点

- (void) notifyNewHeight:(CGFloat) height {
    _currentHeight = height;
    NSDictionary *event =  @{
                             @"target": self.reactTag,
                             @"height": [NSNumber numberWithFloat: _currentHeight]
                             };
    [_eventDispatcher sendInputEventWithName:@"VENTokenFieldChangeHeight" body:event];
}

- (void) setReactTag:(NSNumber *)reactTag
{
    [super setReactTag:reactTag];
    [self notifyNewHeight:self.frame.size.height];
}

- (void) setFrame:(CGRect)frame
{
    if (frame.size.height != _currentHeight && self.reactTag != NULL) {
        [self notifyNewHeight:frame.size.height];
    }
    [super setFrame: frame];
}

您还需要在经理中定义事件:

- (NSDictionary *)customDirectEventTypes
{
    return @{
             @"VENTokenFieldChangeHeight": @{
                     @"registrationName": @"onTokenFieldChangeHeight"
                     }
             };
}

它不漂亮,但它确实有效。

当我回答了我自己的问题时,如果有人有更好的解决方案,我暂时不会接受我的回答!