Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin.ios 如何在Xamarin iOS中更改选项卡式页面的背景色?_Xamarin.ios_Uitabbarcontroller - Fatal编程技术网

Xamarin.ios 如何在Xamarin iOS中更改选项卡式页面的背景色?

Xamarin.ios 如何在Xamarin iOS中更改选项卡式页面的背景色?,xamarin.ios,uitabbarcontroller,Xamarin.ios,Uitabbarcontroller,我需要在UITabBarController中更改当前选项卡页面的背景色。我找遍了我能找到的每一个stackoverflow的帖子,但没有找到对我有用的。我原以为会有类似于uitabar.Appearance.SelectedImageTintColor,只是作为背景色,但似乎不是这样 例如,当我在右侧选项卡上时,我想更改该零件的颜色: 有人知道怎么做吗?您可以在UITabBarController中调用以下代码 public xxxTabBarController() { //...s

我需要在UITabBarController中更改当前选项卡页面的背景色。我找遍了我能找到的每一个stackoverflow的帖子,但没有找到对我有用的。我原以为会有类似于
uitabar.Appearance.SelectedImageTintColor
,只是作为背景色,但似乎不是这样

例如,当我在右侧选项卡上时,我想更改该零件的颜色:


有人知道怎么做吗?

您可以在UITabBarController中调用以下代码

public xxxTabBarController()
{
   //...set ViewControllers

   this.TabBar.BarTintColor = UIColor.Red;
}
使现代化
您可以在UITabBarController中调用以下代码

public xxxTabBarController()
{
   //...set ViewControllers

   this.TabBar.BarTintColor = UIColor.Red;
}
使现代化
诀窍是使用UITabBar的
SelectionIndicatorImage
属性,并使用以下方法生成具有所需颜色的完全填充图像:

private UIImage ImageWithColor(CGSize)
{
CGRect rect=新的CGRect(0,0,size.Width,size.Height);
UIGraphics.BeginImageContext(大小);
使用(CGContext=UIGraphics.GetCurrentContext())
{
context.SetFillColor(UIColor.Green);//必要时更改颜色
context.FillRect(rect);
}
UIImage=UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
返回图像;
}
要初始化所有内容,我们将覆盖
ViewWillLayoutSubviews()
,如下所示:

public override void ViewWillLayoutSubviews()
{
base.ViewWillLayoutSubviews();
//选项卡栏的高度将始终为49,除非我们强制它在运行时重新评估其大小。。。
myTabBar.InvalidateIntrinsicContentSize();
双倍高度=myTabBar.Frame.height;
CGSize size=新的CGSize(新的nfloat(myTabBar.Frame.Width/myTabBar.Items.Length,height));
//现在让我们的绿色形象。。。
UIImage=带有颜色的图像(大小);
//并将其设置为选择指示器
myTabBar.SelectionIndicator图像=图像;
}

如(谷歌在必要时逐步翻译lol)中所述,调用
InvalidateIntrinsicContentSize()
将强制UITabBar重新评估其大小,并将获得选项卡栏的实际运行时高度(而不是XCode中的恒定49高度值).

诀窍是使用UITabBar的
SelectionIndicatorImage
属性,并使用以下方法生成具有所需颜色的完全填充图像:

private UIImage ImageWithColor(CGSize)
{
CGRect rect=新的CGRect(0,0,size.Width,size.Height);
UIGraphics.BeginImageContext(大小);
使用(CGContext=UIGraphics.GetCurrentContext())
{
context.SetFillColor(UIColor.Green);//必要时更改颜色
context.FillRect(rect);
}
UIImage=UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
返回图像;
}
要初始化所有内容,我们将覆盖
ViewWillLayoutSubviews()
,如下所示:

public override void ViewWillLayoutSubviews()
{
base.ViewWillLayoutSubviews();
//选项卡栏的高度将始终为49,除非我们强制它在运行时重新评估其大小。。。
myTabBar.InvalidateIntrinsicContentSize();
双倍高度=myTabBar.Frame.height;
CGSize size=新的CGSize(新的nfloat(myTabBar.Frame.Width/myTabBar.Items.Length,height));
//现在让我们的绿色形象。。。
UIImage=带有颜色的图像(大小);
//并将其设置为选择指示器
myTabBar.SelectionIndicator图像=图像;
}

正如(谷歌在必要时一步一步翻译lol)中提到的,调用
InvalidateIntrinsicContentSize()
将强制UITabBar重新评估其大小,并将获得选项卡栏的实际运行时高度(而不是XCode中的恒定49高度值)。

这将为我更改整个选项卡栏的颜色。我可以更改即时消息选项卡的背景色吗?我将提供一个映像,以便您可以对我尝试执行的操作进行映像。它最终成功了,但我在GetWindow()中遇到了一些问题。另一个答案效果更好,因为TabBar.InvalidateIntrinsicContentSize()会将高度更新为选项卡栏的实际高度。但是谢谢你的回答。它帮助我们找到了最终答案:)这改变了我整个标签栏的颜色。我可以更改即时消息选项卡的背景色吗?我将提供一个映像,以便您可以对我尝试执行的操作进行映像。它最终成功了,但我在GetWindow()中遇到了一些问题。另一个答案效果更好,因为TabBar.InvalidateIntrinsicContentSize()会将高度更新为选项卡栏的实际高度。但是谢谢你的回答。它帮助我们找到了最终的答案:)非常好。这就是我想要的!效果很好。这就是我想要的!
 double IsFullScreen()
    {
        double height = 64;
        if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
        {
            if (UIApplication.SharedApplication.Delegate.GetWindow().SafeAreaInsets.Bottom > 0.0)
            {
                height = 84;
            }
        }
        return height;
    }

    UIImage ImageWithColor(CGSize size, UIColor color)
    {

        var rect = new CGRect(0, 0, size.Width, size.Height);
        UIGraphics.BeginImageContextWithOptions(size, false, 0);

        CGContext context =  UIGraphics.GetCurrentContext();
        context.SetFillColor(color.CGColor);

        context.FillRect(rect);

        UIImage image = UIGraphics.GetImageFromCurrentImageContext();
        UIGraphics.EndImageContext();
        return image;
        
    }