c# - 旋转 UILabel 的拉伸(stretch)宽度

标签 c# ios xamarin xamarin.ios

抱歉,我真的不知道原生 iOS 设计是如何工作的(我通常做 Xamarin Forms 设计)。 我有 UIStackView

UIStackView stackView = new UIStackView(new CGRect(0, 0, View.Frame.Width, View.Frame.Height));

然后我创建 UILabel,设置 AdjustsFontSizeToFitWidth = true 因为我需要自动调整字体大小

之后我对其应用一些旋转 targetLabel.Transform = CGAffineTransform.MakeRotation(new nfloat(Math.PI * 270/180.0)); 因为我需要制作垂直文本。

然后我将这个标签添加到堆栈中。当然我还有其他一些设置,但我认为它们并不重要。

我的最后一步是为具有固定宽度的 UILabel 设置新的 Frame。我尝试通过获取堆栈的高度来设置宽度,我什至尝试将其设置为常量,但它不起作用。标签的宽度总是看起来像自动。

这就是我想要的:

enter image description here

但实际上,目标标签很小。

完整代码在这里:(注意这是 TodayExtension)

[Register("CodeBasedViewController")]
    public class CodeBasedViewController : SLComposeServiceViewController, INCWidgetProviding
    {
        UIImage image;
        private UILabel otherLabel;
        private UILabel targetLabel;

        public CodeBasedViewController(IntPtr handle) : base(handle)
        {
        }

        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);

                UIStackView stackView = new UIStackView(new CGRect(0, 0, View.Frame.Width, View.Frame.Height));
                View.AddSubview(stackView);
                stackView.Axis = UILayoutConstraintAxis.Horizontal;
                image = new UIImage("picture.png");
                UIImageView imageView = new UIImageView(image)
                {
                    ContentMode = UIViewContentMode.ScaleAspectFit
                };
                otherLabel = new UILabel
                {
                    TextColor = UIColor.White,
                    Text = "someTextA",
                    Font = UIFont.SystemFontOfSize(40)
                };
                targetLabel = new UILabel
                {
                    TextColor = UIColor.Black,
                    Text ="4",
                    TextAlignment = UITextAlignment.Left,
                    Font = UIFont.SystemFontOfSize(30),
        AdjustsFontSizeToFitWidth = true,
                    Lines = 1
                };
                targetLabel.Transform = CGAffineTransform.MakeRotation(new nfloat(Math.PI * 270 / 180.0));
                stackView.AddArrangedSubview(imageView);
                stackView.AddArrangedSubview(otherLabel);
                stackView.AddArrangedSubview(targetLabel);
                stackView.Frame = new CGRect(View.Frame.Width / 2, 0,
                    otherLabel .IntrinsicContentSize.Width +
                    targetLabel.IntrinsicContentSize.Width +
                    View.Frame.Height
                    , View.Frame.Height);
                stackView.Center = View.Center;

        targetLabel.Frame = new CGRect(targetLabel.Frame.X, targetLabel.Frame.Y, 150, 150); //test constants

        }

        public void WidgetPerformUpdate(Action<NCUpdateResult> completionHandler)
        {
            completionHandler(NCUpdateResult.NewData);
        }

    }

最佳答案

首先,设置StackView的Distribution属性

stackView.Distribution = UIStackViewDistribution.Fill;

同时不要忘记设置标签的字体

targetLabel.Frame = new CGRect(targetLabel.Frame.X, targetLabel.Frame.Y, 150, 150);
targetLabel.Font = UIFont.SystemFontOfSize(80);

下面是完整的代码,我设置的框架只是为了测试,你可以根据需要设置框架(如果你想设置等于屏幕大小,你应该同时设置标签和 ImageView 的框架).

UIStackView stackView = new UIStackView(new CGRect(100,200,300,150));
View.AddSubview(stackView);
stackView.Distribution = UIStackViewDistribution.Fill;
stackView.Spacing = 10;
stackView.BackgroundColor = UIColor.LightGray;
stackView.Axis = UILayoutConstraintAxis.Horizontal;

UIImageView imageView = new UIImageView()
{
  ContentMode = UIViewContentMode.ScaleAspectFit,
  BackgroundColor = UIColor.Red           
};

otherLabel = new UILabel
{
  TextColor = UIColor.Black,
  Text = "someTextA",
  Font = UIFont.SystemFontOfSize(40)
};

targetLabel = new UILabel
{
  TextColor = UIColor.Black,
  Text = "4",
  TextAlignment = UITextAlignment.Left,
  Font = UIFont.SystemFontOfSize(100),
  AdjustsFontSizeToFitWidth = true,
  Lines = 0
};

targetLabel.Transform = CGAffineTransform.MakeRotation(new nfloat(Math.PI * 270 / 180.0));
stackView.AddArrangedSubview(imageView);
stackView.AddArrangedSubview(otherLabel);
stackView.AddArrangedSubview(targetLabel);

stackView.Center = View.Center;

targetLabel.Frame = new CGRect(targetLabel.Frame.X, targetLabel.Frame.Y, 150, 150);

enter image description here

关于c# - 旋转 UILabel 的拉伸(stretch)宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58025432/

相关文章:

c# - 如何实现异步命令

xamarin 绑定(bind) 'Jsgf' 未实现接口(interface)成员 'IIterable.Iterator()

c# - 在C#中访问 double 值的 "N bits"?

c# - 相同类型对象的 InvalidCastException - 自定义控件加载

ios - Debug模式不起作用

ios - 为什么我不能在 Realm 中保存数据

.net - 无法将 NuGet 包添加到 Monodevelop 5 中的引用

c# - Protobuf 消息平台是否独立

c# - 如何准备 Word 2007 文档以便 C# 可以从语义上提取数据?

ios - UICollectionView 会在调用 "reloadItems"方法时重新创建单元格