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