本文将带您了解关于在SwiftUI中以编程方式检测Tab栏或TabView的高度的新内容,同时我们还将为您解释swift判断语句的相关知识,另外,我们还将为您提供关于ios–uitableview的框
本文将带您了解关于在SwiftUI中以编程方式检测Tab栏或TabView的高度的新内容,同时我们还将为您解释swift判断语句的相关知识,另外,我们还将为您提供关于ios – uitableview的框架没有以编程方式改变、ios – 以编程方式更改UIImageView Xcode Swift的高度和宽度、ios – 以编程方式更改UITableView的大小、ios – 在Swift 3中以编程方式使用ScrollView的实用信息。
本文目录一览:- 在SwiftUI中以编程方式检测Tab栏或TabView的高度(swift判断语句)
- ios – uitableview的框架没有以编程方式改变
- ios – 以编程方式更改UIImageView Xcode Swift的高度和宽度
- ios – 以编程方式更改UITableView的大小
- ios – 在Swift 3中以编程方式使用ScrollView
在SwiftUI中以编程方式检测Tab栏或TabView的高度(swift判断语句)
我有一个SwiftUI应用程序,它将具有一个浮动播客播放器,类似于位于选项卡栏上方的Apple
Music播放器,并且在播放器运行时在所有选项卡和视图中均保持不变。我还没有找到一种好的方法来放置播放器,使其处于Tab栏上方,因为Tab栏的高度随设备而异。我发现的主要问题是如何将播放器放置在应用程序根视图中的叠加层或ZStack中,而不是在TabView本身中。由于我们无法自定义TabView布局的视图层次结构,因此无法在TabBar本身及其上方的视图内容之间注入视图。我的基本代码结构:
TabView(selection: $appState.selectedTab){ Home() .tabItem { VStack { Image(systemName: "house") Text("Home") } } ...}.overlay( VStack { if(audioPlayer.isShowing) { Spacer() PlayerContainerView(player: audioPlayer.player) .padding(.bottom, 58) .transition(.moveAndFade) } })
这里的主要问题是PlayerContainerView的位置是硬编码的,填充为58,以便清除TabView。如果我可以检测到TabView的实际框架高度,则可以针对给定设备进行全局调整,这样就可以了。有人知道如何可靠地做到这一点吗?还是您有任何想法如何将PlayerContainerView放置在TabView本身内,以便在切换显示时仅显示在Home()视图和Tab栏之间?对于任何反馈,我们都表示感谢。
答案1
小编典典由于正式允许并记录了与UIKit的桥梁,因此可以在需要时从那里读取所需的信息。
这是直接从中读取标签栏高度的可能方法 UITabBar
// Helper bridge to UIViewController to access enclosing UITabBarController// and thus its UITabBarstruct TabBarAccessor: UIViewControllerRepresentable { var callback: (UITabBar) -> Void private let proxyController = ViewController() func makeUIViewController(context: UIViewControllerRepresentableContext<TabBarAccessor>) -> UIViewController { proxyController.callback = callback return proxyController } func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<TabBarAccessor>) { } typealias UIViewControllerType = UIViewController private class ViewController: UIViewController { var callback: (UITabBar) -> Void = { _ in } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if let tabBar = self.tabBarController { self.callback(tabBar.tabBar) } } }}// Demo SwiftUI view of usagestruct TestTabBar: View { var body: some View { TabView { Text("First View") .background(TabBarAccessor { tabBar in print(">> TabBar height: \(tabBar.bounds.height)") // !! use as needed, in calculations, @State, etc. }) .tabItem { Image(systemName: "1.circle") } .tag(0) Text("Second View") .tabItem { Image(systemName: "2.circle") } .tag(1) } }}
ios – uitableview的框架没有以编程方式改变
用户可以通过按导航栏上的一个按钮隐藏正确的UITableview.
我使用此代码使UITableview全屏显示:
self.rightTableView.hidden= YES; self.leftTable.frame= CGRectMake(0,self.dataTableView.frame.origin.y,self.view.frame.size.width,self.dataTableView.frame.size.height);
但它没有用.
我甚至将此代码放在viewdidload和viewDidAppear方法上,但框架没有改变.
解决方法
相反,您应该修改约束.
您可以通过为约束创建出口并在界面构建器中进行连接来完成此操作.
ios – 以编程方式更改UIImageView Xcode Swift的高度和宽度
image =(0,50,50)
但我需要的高度不是一个静态数字.
像image =(0,frame.height * 0.2,50)
有什么建议么?
解决方法
let screenSize: CGRect = UIScreen.main.bounds image.frame = CGRect(x: 0,y: 0,width: 50,height: screenSize.height * 0.2)
ios – 以编程方式更改UITableView的大小
看起来苹果这样做很多.一个主要的地方,我注意到它是在他们的联系人,电话号码表增长和收缩,取决于有多少个数字.
我在网上搜索,找不到很多信息.任何人都可以帮忙吗?
谢谢
解决方法
tableView.frame = CGRectMake(tableView.frame.origin.x,tableView.frame.origin.y,tableView.frame.size.width,tableView.contentSize.height);
希望这能帮助你…
总结
以上是小编为你收集整理的ios – 以编程方式更改UITableView的大小全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
ios – 在Swift 3中以编程方式使用ScrollView
希望有人可以帮助我们查看下面的代码!
import UIKit class ViewController: UIViewController { let labelOne: UILabel = { let label = UILabel() label.text = "Scroll Top" label.backgroundColor = .red label.translatesAutoresizingMaskIntoConstraints = false return label }() let labelTwo: UILabel = { let label = UILabel() label.text = "Scroll Bottom" label.backgroundColor = .green label.translatesAutoresizingMaskIntoConstraints = false return label }() override func viewDidLoad() { super.viewDidLoad() let screensize: CGRect = UIScreen.main.bounds let screenWidth = screensize.width let screenHeight = screensize.height var scrollView: UIScrollView! scrollView = UIScrollView(frame: CGRect(x: 0,y: 120,width: screenWidth,height: screenHeight)) scrollView.contentSize = CGSize(width: screenWidth,height: 2000) scrollView.addSubview(labelOne) scrollView.addSubview(labelTwo) view.addSubview(labelOne) view.addSubview(labelTwo) view.addSubview(scrollView) // Visual Format Constraints view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|",options: NSLayoutFormatOptions(),metrics: nil,views: ["v0": labelOne])) view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-100-[v0]",views: ["v0": labelOne])) // Using iOS 9 Constraints in order to place the label past the iPhone 7 view view.addConstraint(NSLayoutConstraint(item: labelTwo,attribute: .top,relatedBy: .equal,toItem: labelOne,attribute: .bottom,multiplier: 1,constant: screenHeight + 200)) view.addConstraint(NSLayoutConstraint(item: labelTwo,attribute: .right,constant: 0)) view.addConstraint(NSLayoutConstraint(item: labelTwo,attribute: .left,constant: 0) } }
解决方法
只记得:
>滚动视图的内容元素必须具有左/上/宽度/高度值.对于标签等对象,它们具有固有的大小,因此您只需要定义左侧和右侧.最佳.
>滚动视图的内容元素也定义了可滚动区域的边界 – contentSize – 但是它们使用底部和底部来定义.正确的约束.
>结合这两个概念,您会发现需要一个“连续链”,其中至少有一个元素定义了顶部/左侧/底部/右侧范围.
这是一个简单的示例,它将直接在Playground页面中运行:
import UIKit import PlaygroundSupport class TestViewController : UIViewController { let labelOne: UILabel = { let label = UILabel() label.text = "Scroll Top" label.backgroundColor = .red label.translatesAutoresizingMaskIntoConstraints = false return label }() let labelTwo: UILabel = { let label = UILabel() label.text = "Scroll Bottom" label.backgroundColor = .green label.translatesAutoresizingMaskIntoConstraints = false return label }() let scrollView: UIScrollView = { let v = UIScrollView() v.translatesAutoresizingMaskIntoConstraints = false v.backgroundColor = .cyan return v }() override func viewDidLoad() { super.viewDidLoad() // add the scroll view to self.view self.view.addSubview(scrollView) // constrain the scroll view to 8-pts on each side scrollView.leftAnchor.constraint(equalTo: view.leftAnchor,constant: 8.0).isActive = true scrollView.topAnchor.constraint(equalTo: view.topAnchor,constant: 8.0).isActive = true scrollView.rightAnchor.constraint(equalTo: view.rightAnchor,constant: -8.0).isActive = true scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor,constant: -8.0).isActive = true // add labelOne to the scroll view scrollView.addSubview(labelOne) // constrain labelOne to left & top with 16-pts padding // this also defines the left & top of the scroll content labelOne.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor,constant: 16.0).isActive = true labelOne.topAnchor.constraint(equalTo: scrollView.topAnchor,constant: 16.0).isActive = true // add labelTwo to the scroll view scrollView.addSubview(labelTwo) // constrain labelTwo at 400-pts from the left labelTwo.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor,constant: 400.0).isActive = true // constrain labelTwo at 1000-pts from the top labelTwo.topAnchor.constraint(equalTo: scrollView.topAnchor,constant: 1000).isActive = true // constrain labelTwo to right & bottom with 16-pts padding labelTwo.rightAnchor.constraint(equalTo: scrollView.rightAnchor,constant: -16.0).isActive = true labelTwo.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor,constant: -16.0).isActive = true } } let vc = TestViewController() vc.view.backgroundColor = .yellow PlaygroundPage.current.liveView = vc
我们今天的关于在SwiftUI中以编程方式检测Tab栏或TabView的高度和swift判断语句的分享已经告一段落,感谢您的关注,如果您想了解更多关于ios – uitableview的框架没有以编程方式改变、ios – 以编程方式更改UIImageView Xcode Swift的高度和宽度、ios – 以编程方式更改UITableView的大小、ios – 在Swift 3中以编程方式使用ScrollView的相关信息,请在本站查询。
本文标签: