[Ios] يوس إيتابيفوسيل أفقيا التمرير معاينات مع تخطيط السيارات


Answers

استيراد إيكيت

كلاس فيوكونترولر: إيفيوكونترولر، إيتابيفيوديليغات، إيتابلفيوداتاسورس {

var tableviwe:UITableView?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.tableviwe = UITableView(frame: self.view!.bounds)
    self.tableviwe!.delegate = self
    self.tableviwe!.dataSource = self;
    self.tableviwe?.backgroundColor = UIColor.redColor()
    let angle:CGFloat = CGFloat(M_PI_2);//double angle;
    self.tableviwe?.transform = CGAffineTransformMakeRotation(angle)
    self.view?.addSubview(self.tableviwe!)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

//UITableViewDelegate
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let alert = UIAlertView()
    alert.title = "Alert"
    alert.message = NSString(format: "%@ %d", "My hit ", indexPath.row)
    alert.addButtonWithTitle("Ok")
    alert.show()
}
//UITableViewDataSource
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1000
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat{
    return 200.0
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "channel")
    cell.textLabel?.text = NSString(format: "%@ %d", "hello my friend", indexPath.row)
    let angle:CGFloat = CGFloat(M_PI_2);// double angle;
    cell.contentView.transform = CGAffineTransformMakeRotation(-angle)
    return cell
}
Question

أنا أحاول إنشاء عرض جدول، من الخلايا التي تحتوي على بطاقات تم تمريرها أفقيا. أنا خلقت بسيطة التجريبي التطبيق وكان قد نجحت في تنفيذ النسخة التي تستخدم تخطيط السيارات ... إلى حد ما. ولا تزال هناك قضية واحدة (أعتقد أنها نهائية). يتم تحجيم التحجيم الرأسي للبطاقات.

عرض جدول:

class MultiCardTableViewController: UITableViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 12
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("CardCell", forIndexPath: indexPath) as CardCell

        //since these cells are re-used, we have to clear out the previous dynamic subviews
        for subView in cell.scrollContentView.subviews { subView.removeFromSuperview() }

        var card = NSBundle.mainBundle().loadNibNamed("CardView", owner: self, options: nil)[0] as CardView
        //Turn this off because subviews of UIScrollView use autoresizing mask by default, which conflict with Auto-Layout constraints
        card.setTranslatesAutoresizingMaskIntoConstraints(false)
        cell.scrollContentView.addSubview(card)

        var card2 = NSBundle.mainBundle().loadNibNamed("CardView", owner: self, options: nil)[0] as CardView
        //Turn this off because subviews of UIScrollView use autoresizing mask by default, which conflict with Auto-Layout constraints
        card2.setTranslatesAutoresizingMaskIntoConstraints(false)
        cell.scrollContentView.addSubview(card2)

        //Add bottom margin to the last cell (for consistency)
        //Add vertical constraints (standard margins) for each card
        var constraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|-[card]|", options: nil, metrics: nil, views: ["card": card])
        constraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|-[card2]|", options: nil, metrics: nil, views: ["card2": card2])
        //Add horizontal constraints that tie the cards together, and to the super view
        constraints += NSLayoutConstraint.constraintsWithVisualFormat("H:|-[card]-(16)-[card2]-|", options: nil, metrics: nil, views: ["card": card, "card2": card2])
        //Add horizontal constraint that disambiguates individual card width
        constraints += NSLayoutConstraint.constraintsWithVisualFormat("H:[card(==card2)]", options: nil, metrics: nil, views: ["card": card, "card2": card2])
        cell.scrollContentView.addConstraints(constraints)

        //Set the scrollview content horizontal size constraint to double the window width (1 window width for each card
        cell.contentWidthConstraint.constant = self.tableView.frame.width * 2

        return cell
    }
}

زنزانة:

class CardCell: UITableViewCell
{
    @IBOutlet weak var scrollView: UIScrollView!
    //A content view directly inside of the scroll view, constrained to super view on all sides, as well as height & width
    @IBOutlet weak var scrollContentView: UIView!
    //A reference to the width constraint for the scrollContentView
    @IBOutlet weak var contentWidthConstraint: NSLayoutConstraint!
}

CardView.xib:

نتيجة:

التباعد الأفقي والتحجيم هو الصحيح، ولكن يبدو أن القيود العمودية غير كافية أو غير صحيحة. أجد هذا من الصعب أن نعتقد لأنها بسيطة جدا. كل بطاقة لديها القيد العمودي: V:|-[card]|

لقد حاولت إضافة قيود ارتفاع صريح على البطاقات، على غرار العرض، ولكن هذا أيضا لا ينتج النتائج الصحيحة: V:[card(==card2)]

نتيجة تقييد الارتفاع الرأسي الصريح:

لقد تم التعدي عقلي لأيام ... ما أنا في عداد المفقودين؟

تحرير: وأضاف رابط مصدر جيثوب لمشروع العينة