UITabBar 높이 변경
내가 사용하는 UITabBarController
루트보기 및 응용 프로그램이 지원하는 아이폰 OS 6 이상으로. 프로젝트 클래스 계층 구조는 다음과 같습니다.
UITabBarController
- tab1
- UINavigationController
- UIViewController
- UIViewController
.
.
- tab2
- UINavigationController
- UIViewController
- UIViewController
.
.
.
- tab3
- UIViewController
- tab4
- UIViewController
위의 계층 구조에서 UITabBar
내부에있는 UIViewController 중 하나에서 높이를 변경하기 위해 아래 코드를 사용했습니다 UINavigationController
.
CGRect tabbarFrame = self.tabBarController.tabBar.frame;
tabbarFrame.size.height += 60;
self.tabBarController.tabBar.frame = tabbarFrame;
그러나 높이는 변하지 않습니다. UITabBar
기본 높이로 표시됩니다. 값을 로깅하면 아래와 같이 변경된 값을 출력합니다.
<UITabBar: 0xb528f60; frame = (0 431; 320 109); autoresize = W+TM; layer = <CALayer: 0xb529080>>
UITabBar
이 같은 것을 달성하기 위해의 높이를 어떻게 변경할 수 있습니까 ?
나는이 문제에 직면했고 그것을 해결할 수 있었다.
클래스의 하위 클래스에 다음 코드를 추가해야합니다 UITabBarController
.
const CGFloat kBarHeight = 80;
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
CGRect tabFrame = self.tabBar.frame; //self.TabBar is IBOutlet of your TabBar
tabFrame.size.height = kBarHeight;
tabFrame.origin.y = self.view.frame.size.height - kBarHeight;
self.tabBar.frame = tabFrame;
}
빠른:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
tabBar.frame.size.height = kBarHeight
tabBar.frame.origin.y = view.frame.height - kBarHeight
}
들어 아이폰 OS 8.2 , 엑스 코드 6.2 스위프트 언어 :
UITabBarController
(유형 UITabBarController
)에 대한 "DNMainTabVC.swift"(DeveloperNameMainTabViewController.swift 파일)를 생성하고 스토리 보드 VC에 연결합니다.
다음 행을 추가하십시오.
override func viewWillLayoutSubviews() {
var tabFrame = self.tabBar.frame
// - 40 is editable , the default value is 49 px, below lowers the tabbar and above increases the tab bar size
tabFrame.size.height = 40
tabFrame.origin.y = self.view.frame.size.height - 40
self.tabBar.frame = tabFrame
}
이것은 나를 위해 일했습니다.
Swift3.0, Swift 4.0 호환
iPhone X 이전 기본 탭 막대 높이 : 49pt
iPhone X 기본 탭 막대 높이 : 83pt
iPhone X 화면 크기를 포함한 모든 iOS 기기를 지원하는 범용 솔루션 은 다음과 같습니다.
UITabBar의 기본 높이 캡처 :
fileprivate lazy var defaultTabBarHeight = { tabBar.frame.size.height }()
UITabBar의 높이 조정 :
override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() let newTabBarHeight = defaultTabBarHeight + 16.0 var newFrame = tabBar.frame newFrame.size.height = newTabBarHeight newFrame.origin.y = view.frame.size.height - newTabBarHeight tabBar.frame = newFrame }
유형의 사용자 지정 하위 클래스를 UITabBar
만든 후 다음 메서드를 구현합니다.
@implementation CustomTabBar
#define kTabBarHeight = // Input the height we want to set for Tabbar here
-(CGSize)sizeThatFits:(CGSize)size
{
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = kTabBarHeight;
return sizeThatFits;
}
@end
이것이 효과가 있기를 바랍니다.
XCode 9.0 및 Swift 4 에서 테스트 됨
이전 답변에서 제안 - 상속 UITabBar
및 재정의 sizeThatFits
,하지만 마크 height
와 같은 @IBInspectable
, 그것이 설정 될 수 있도록 인터페이스 빌더 :
import UIKit
class CustomTabBar : UITabBar {
@IBInspectable var height: CGFloat = 0.0
override func sizeThatFits(_ size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
if height > 0.0 {
sizeThatFits.height = height
}
return sizeThatFits
}
}
Identity Inspector (⌥⌘3) 에서 CustomTabBar
클래스 설정 :UITabBar
그런 다음 Attributes Inspector (⌥⌘4) 에서 원하는 값 Height
(보다 큼 0.0
)을 설정합니다 .
Swift 4의 경우
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 60 // adjust your size here
return sizeThatFits
}
}
스위프트 2.0 :
var tabBar:UITabBar?
override func viewWillLayoutSubviews() {
var tabFrame: CGRect = self.tabBar!.frame
tabFrame.size.height = 60
tabFrame.origin.y = self.view.frame.size.height - 60
self.tabBar!.frame = tabFrame
}
Swift 3.0+ 아래 코드에서 원하는 높이로 200을 교체하십시오.
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: UIScreen.main.bounds.width, height: 200)
}
}
Swift 4 및 iphone x와 호환
class CustomTabBar : UITabBar {
@IBInspectable var height: CGFloat = 65.0
override open func sizeThatFits(_ size: CGSize) -> CGSize {
guard let window = UIApplication.shared.keyWindow else {
return super.sizeThatFits(size)
}
var sizeThatFits = super.sizeThatFits(size)
if height > 0.0 {
if #available(iOS 11.0, *) {
sizeThatFits.height = height + window.safeAreaInsets.bottom
} else {
sizeThatFits.height = height
}
}
return sizeThatFits
}
}
이전 답변을 구축하고 Swift 3을 업데이트합니다.
UITabController를 하위 클래스로 만들고 UITabController의 Identity Inspector에 새 사용자 지정 클래스를 할당해야합니다.
스위프트 3.0
class MainTabBarController: UITabBarController {
override func viewWillLayoutSubviews() {
var newTabBarFrame = tabBar.frame
let newTabBarHeight: CGFloat = 60
newTabBarFrame.size.height = newTabBarHeight
newTabBarFrame.origin.y = self.view.frame.size.height - newTabBarHeight
tabBar.frame = newTabBarFrame
}
}
Warning: if you get a blank space below your tab bar, make sure you did put this code in viewWillLayoutSubviews() and not viewDidLoad().
Xamarin implementation:
public override void ViewWillLayoutSubviews()
{
base.ViewWillLayoutSubviews();
const float newTabBarHeight = 40f;
TabBar.Frame = new CGRect(TabBar.Frame.X, TabBar.Frame.Y + (TabBar.Frame.Height - newTabBarHeight), TabBar.Frame.Width, newTabBarHeight);
}
For some reason, the answer from @Rushikesh was working pretty well until iOS 10 but I had some issues with iOS 11 and Swift 3.2.
The tabBar was changing its frame every time I touched a new tab.
I fixed this by putting the code in the viewDidLayoutSubviews()
function instead of viewWillLayoutSubviews()
Swift 3 :
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var tabFrame = tabBar.frame
tabFrame.size.height = 65
tabFrame.origin.y = view.frame.size.height - 65
tabBar.frame = tabFrame
}
You can modify the tab bar's height by subclassing it. I actually did this long time ago. xcode 6.0
override func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: super.sizeThatFits(size).width, height: 60)
}
That should return its default width with the height of 60pts.
this is also one way to do that
extension UITabBar {
override public func sizeThatFits(size: CGSize) -> CGSize {
super.sizeThatFits(size)
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 71
return sizeThatFits
} }
모든 화면 크기로 작동 : tabBarHeight를 (tabBar의 원래 높이-20)로 설정하는 것이 중요하므로 나중에 viewDidLayoutSubviews에서 사용할 수 있으며 원하는 크기를 하드 코딩하는 것보다 낫습니다. 이 크기는 모든 화면에서 작동하지 않을 수 있습니다.
창 안전 영역 삽입은 화면 하단 가장자리로부터의 거리를 유지하기 위해 탭 막대 높이 하단에 필요한 패딩을 유지합니다.
var tabBarHeight = CGFloat()
override func viewDidLoad() {
super.viewDidLoad()
tabBarHeight = self.tabBar.frame.height - 20
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var tabFrame = self.tabBar.frame
guard let window = UIApplication.shared.keyWindow else {return}
tabFrame.size.height = tabBarHeight + window.safeAreaInsets.bottom
self.tabBar.frame = tabFrame
}
Safe Area를 사용하여 Kiarash Asar의 답변을 수정했습니다.
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
var safeAreaBottomInset: CGFloat = 0.0
if #available(iOS 11.0, *) {
safeAreaBottomInset = view.safeAreaInsets.bottom
}
let newTabBarHeight: CGFloat = {{myDesiredHeight}} + safeAreaBottomInset
var newFrame = tabBar.frame
newFrame.size.height = newTabBarHeight
newFrame.origin.y = view.frame.size.height - newTabBarHeight
tabBar.frame = newFrame
}
iPhoneX는 높이가 다르기 때문에 더 작은 높이로 이동하면 iPhoneX에서 탭바 모양이 나빠집니다.
- (void)viewWillLayoutSubviews
{
int requiredHeight = 55;
CGRect tabFrame = self.tabBar.frame;
if (tabFrame.size.height < requiredHeight)
{
tabFrame.size.height = requiredHeight;
tabFrame.origin.y = self.view.frame.size.height - requiredHeight;
self.tabBar.frame = tabFrame;
}
}
참고 URL : https://stackoverflow.com/questions/23044218/change-uitabbar-height
'developer tip' 카테고리의 다른 글
가장 좋아하는 C ++ 코딩 스타일 관용구는 무엇입니까? (0) | 2020.12.02 |
---|---|
UITabBar 높이 변경 (0) | 2020.12.02 |
CSS의 숨겨진 기능 (0) | 2020.12.02 |
일에서 밀리 초로 변환 (0) | 2020.12.02 |
추악한 if 문 제거 (0) | 2020.12.02 |