是否可以更改大导航栏标题的x偏移量?我想将x偏移量更改为36pt。
eh57zj3b1#
我刚刚在最新版本的iOS 12中发现,如果你简单地修改UINavigationBar的layoutMargins属性,这会影响大标题。
UINavigationBar
layoutMargins
let navigationBar = navigationController.navigationBar navigationBar.layoutMargins.left = 36 navigationBar.layoutMargins.right = 36
我尝试了这里提到的使用自定义NSMutableParagraphStyle的解决方案。这确实有效,但因为它拉伸了组成大标题的UILabel视图,当你向下滑动时,它在文本稍微增长的地方播放的微妙动画会变得相当扭曲。
NSMutableParagraphStyle
UILabel
ibps3vxo2#
您可以通过以下方式添加附加偏移:
if #available(iOS 11.0, *) { let navigationBarAppearance = UINavigationBar.appearance() let style = NSMutableParagraphStyle() style.alignment = .justified style.firstLineHeadIndent = 18 navigationBarAppearance.largeTitleTextAttributes = [NSAttributedStringKey.paragraphStyle: style] }
hjzp0vay3#
你不能。你需要编写你自己的NavigationController,通过为UINNavigationController创建子类。
gorkyyrv4#
您必须创建UINavigationBar的子类,然后覆盖draw方法,并在内部进行更改。请查看我的工作示例,然后根据需要调整偏移/样式:
override func draw(_ rect: CGRect) { super.draw(rect) self.backgroundColor = UIColor.white let largeView = "_UINavigationBarLargeTitleView" let labelcolor = UIColor(red: 36.0/255.0, green: 38.0/255.0, blue: 47.0/255.0, alpha: 1.0) for view in self.subviews { if largeView.contains(String(describing: type(of: view))) { for v in view.subviews { if String(describing: type(of: v)) == "UILabel" { var titleLabel = v as! UILabel var labelRect = titleLabel.frame let labelInsets = UIEdgeInsets(top: 10, left: 13, bottom: 0, right: 0) let attrText = NSMutableAttributedString(string: "Jobs", attributes: [NSAttributedStringKey.font: UIFont(name: "SFProDisplay-Heavy", size: 30)!, NSAttributedStringKey.foregroundColor: labelcolor]) labelRect.origin.y += 20 let newLabel = UILabel(frame: labelRect) newLabel.attributedText = attrText titleLabel.text = "" if labelRect.origin.y > 0 { titleLabel = newLabel titleLabel.drawText(in: UIEdgeInsetsInsetRect(labelRect, labelInsets)) } } } } } }
jvlzgdj95#
您可以在AppDelegate中调整整个应用程序的布局边距
AppDelegate
class AppDelegate: NSObject, UIApplicationDelegate { func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil ) -> Bool { // Adjust left margin UINavigationBar.appearance().layoutMargins.left = 36 return true } } @main struct testApp: App { // Attach AppDelegate @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { ContentView() } } }
5条答案
按热度按时间eh57zj3b1#
我刚刚在最新版本的iOS 12中发现,如果你简单地修改
UINavigationBar
的layoutMargins
属性,这会影响大标题。我尝试了这里提到的使用自定义
NSMutableParagraphStyle
的解决方案。这确实有效,但因为它拉伸了组成大标题的UILabel
视图,当你向下滑动时,它在文本稍微增长的地方播放的微妙动画会变得相当扭曲。ibps3vxo2#
您可以通过以下方式添加附加偏移:
hjzp0vay3#
你不能。你需要编写你自己的NavigationController,通过为UINNavigationController创建子类。
gorkyyrv4#
您必须创建UINavigationBar的子类,然后覆盖draw方法,并在内部进行更改。请查看我的工作示例,然后根据需要调整偏移/样式:
jvlzgdj95#
快速用户界面
您可以在
AppDelegate
中调整整个应用程序的布局边距