我正在包装一个希望控制自己高度的现有iOS组件。因此组件将修改其框架属性,但当然RN会根据应用的样式进行布局,因此忽略它。我正在寻找一种很好的方法来允许组件在React Native布局中自行调整大小。
我可以覆盖setFrame方法并通过事件将新高度传递回JS代码,然后设置高度样式,但似乎必须有一种更简单的方法!
有什么建议吗?
答案 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"
}
};
}
它不漂亮,但它确实有效。
当我回答了我自己的问题时,如果有人有更好的解决方案,我暂时不会接受我的回答!