【问题标题】:Scale Image in NavigationItem.TitleView to fit inside of the UINavigationBar缩放 NavigationItem.TitleView 中的图像以适合 UINavigationBar 内部
【发布时间】:2017-01-27 20:51:17
【问题描述】:

我是 iOS 开发的新手,但对 C# 并不陌生。我选择学习 Xamarin/Microsoft 提供的教程,然后尝试扩展它。我正在寻找一种在 UINavigationBar 中心设置图像的方法,我发现这样做的正确方法是使用 NavigationItem.TitleView = myImageView;

这很好用!但是,有一个问题:我使用的图像只是比 NavigationBar 大。我想缩放(并保持纵横比)图像以适合 NavigationBar 内部,同时看起来也不错。这是我到目前为止为获取图像所做的工作:

var logo = UIImage.FromFile("PolarisLogoBlank.png");
var iView = new UIImageView(logo);

NavigationItem.TitleView = iView;

这是我得到的图片:

非常感谢任何帮助;谢谢!

【问题讨论】:

    标签: c# ios iphone mobile xamarin.ios


    【解决方案1】:

    你必须同时设置 imageView 的高度和 imageView 的 contentMode,这样图像才不会被拉伸。这就是你要找的:

    iView.contentMode = .scaleAspectFit
    if let navigationController = navigationController  {
        iView.frame.size.height = navigationController.navigationBar.frame.size.height
    }
    

    或强制展开

    iView.contentMode = .scaleAspectFit
    iView.frame.size.height = navigationController!.navigationBar.frame.size.height
    

    【讨论】:

    • 所以,iView.ContentMode = UIViewContentMode.ScaleAspectFit; 工作得很好;但是,当我尝试iView.Frame.Size.Height = NavigationController.NavigationBar.Frame.Size.Height; 时,它告诉我“无法修改CGRect.Size 的返回值,因为它不是变量”
    • 啊,是的。这个iView.frame.size.height = in swift 是一个快捷方式,它实际上用旧的宽度值和新的高度值创建了一个新结构(CGSize),然后将它分配给iView.frame.size。因此,您必须实际创建一个新的 Size 结构并将宽度分配给旧宽度,将高度分配给新高度。 CGRect(框架)也是一个结构体,因此您实际上可能需要创建一个新的 Rect 并将其分配给 iView.frame
    • 我已经测试了@DarrylLJohnson 的代码,它工作正常。
    • @DarrylLJohnson 我很感激兄弟!我实际上最终这样做了:var newRect = new CGRect(); -> newRect = iView.Frame; -> newRect.Height = NavigationController.NavigationBar.Frame.Size.Height; -> newRect.Width = iView.Frame.Size.Width; -> iView.Frame = newRect;
    【解决方案2】:

    你可以设置imageView的大小:

    iView.frame.size.height = self.navigationController.navigationBar.frame.size.height;
    

    我不确定在 C# 中到底是什么样子,但在 Objective-C 中你会这样做。

    希望对您有所帮助。

    【讨论】:

    • 你和上面的达里尔在同一条轨道上,肯定给你投了赞成票。您发布的内容包括 C# 中不存在的 Swift 中的快捷方式,因此我必须创建一个新的 Frame (CGRect) 结构并操作这些值。谢谢老兄!
    • 没问题,很抱歉我无法提供完整的答案。很高兴你明白了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 2016-10-02
    • 2023-03-11
    • 2012-04-17
    • 2012-07-26
    • 2019-04-08
    相关资源
    最近更新 更多