I solved my problem and maintained the native UITabBarController :
Since the UITabBarController will force the view controllers' size to its bounds, I dynamically changed the UITabBar origin.y ( tabBar.origin.y -= reduced size
) and size.height tabBar.size.height += reduced size
) so that the container frame for the viewcontrollers is forced to get smaller.
And than, to preserve the casual tab bar design, for each UITabBarItem in the tabBar, i pushed the imageInset.
This way there is no need to force change frames of multiple viewControllers views in tabBarController through observers for layer change or any other similar methods.