UIScrollView子视图在按比例缩小时放错位置,并且子视图在四舍五入时不显示

问题描述 投票:0回答:2

所以我正在制作我的第一个Swift iOS应用。我有两个问题需要帮助。

第一个问题:我在子视图中遇到了一些问题,这些子视图是通过编程创建的,当显示在小屏幕上时无法正确对齐。

第一张图片显示了我打算如何显示滚动视图。 (iPhone 11 Pro Max)

How the scrollview is supposed to look

但是,这是在较小的屏幕上显示的样子。 (iPhone 8)

Subviews are cut off on this picture

[我认为问题在于我以编程方式创建子视图,因为滚动视图的大小正是我想要的大小。

这是我在viewDidLoad()中使用的快速代码:

var districtNewsSize = 10;
var districtNewsFrame = CGRect(x:0,y:0,width:0,height:0);
// District News -----
        districtNewsPageControl.numberOfPages = districtNewsSize;
        for aIndex in 0..<districtNewsSize{
            districtNewsFrame.origin.x = districtNewsScrollView.frame.size.width * CGFloat(aIndex);
            districtNewsFrame.size = districtNewsScrollView.frame.size;


            // create content in scrollview
            let contentView = UIButton(frame: districtNewsFrame);
            contentView.backgroundColor = makeColor(r: 147, g: 66, b: 78);
            contentView.setTitle("titletext", for: .normal);
            contentView.layer.cornerRadius = 20; // just to show how displaced the views are


            // add contentview to scrollview
            self.districtNewsScrollView.addSubview(contentView);
        }
        // change horizontal size of scrollview
        districtNewsScrollView.contentSize = CGSize(width: districtNewsScrollView.frame.size.width * CGFloat(districtNewsSize), height: districtNewsScrollView.frame.size.height);
        districtNewsScrollView.delegate = self;

第二个问题

:当尝试使滚动视图的顶部两个角变圆时,滚动视图内部的内容似乎消失了。

这是第一个子视图的图片。

First subview seems fine

这是第二个子视图的图片。

The second subview doesn't even show anymore

我也怀疑这是由于我使用的功能使顶部边缘变圆。

这是我为UIScrollView制作的扩展功能:

extension UIScrollView{
    func setRoundedEdge(corners:UIRectCorner, radius: CGFloat){ // label.setRoundedEdge([.TopLeft, . TopRight], radius: 10)
        let maskPath1 = UIBezierPath(roundedRect: bounds,
            byRoundingCorners: corners,
            cornerRadii: CGSize(width: radius, height: radius))
        let maskLayer1 = CAShapeLayer()
        maskLayer1.frame = bounds
        maskLayer1.path = maskPath1.cgPath
        layer.mask = maskLayer1
    }
}

这就是我在viewDidLoad()中调用函数的方式:

districtNewsScrollView.setRoundedEdge(corners: [.topRight,.topLeft], radius: 30);

任何帮助将不胜感激。我一直被这两个问题困扰,在网上找不到任何东西(可能是因为我的措词不正确,但我不知道如何描述这些问题)。谢谢!

所以我正在制作我的第一个Swift iOS应用。我有两个问题需要帮助。第一个问题:我遇到了一些以编程方式创建的子视图问题,这些问题不是...

ios swift uiscrollview
2个回答
0
投票

我假设您使用情节提要进行滚动视图并以编程方式在viewDidLoad中添加子视图,


0
投票

这是我解决这两个问题的方法:

© www.soinside.com 2019 - 2024. All rights reserved.