2015-04-27 18 views
10

Tắt bố cục tự động cho chế độ xem. Tuy nhiên điều này không hoạt động. Tôi không có hạn chế về chiều cao. Chỉ chiều rộng bằng chiều rộng lượt xem gốc.Thay đổi chiều cao của UIView với tính năng tự động tắt tắt

@IBOutlet weak var questionTextView: UITextView! 
override func viewDidLoad() { 
    var newFrame = CGRectMake(0, 0, 300, 202) 
    questionView.frame = newFrame 
} 
+0

đối với tôi nó hoạt động! đảm bảo rằng bạn đã kết nối ổ cắm và cũng gọi 'super.viewDidLoad()' ở đầu triển khai 'viewDidLoad' của bạn! –

Trả lời

29

Bạn đã tắt bố cục tự động cho toàn bộ nib trong trình tạo giao diện chưa?

Bạn không thể tắt bố cục tự động cho các chế độ xem phụ cụ thể trong trình tạo giao diện - bạn chỉ có thể thực hiện nó trong thời gian chạy theo chương trình.

Dựa trên những gì bạn đã nói, bạn vẫn có một hạn chế hoạt động. Làm thế nào để bạn có những hạn chế khi bạn đã tắt bố cục tự động?

Nếu bạn có bố cục tự động hoạt động, đặt chiều cao cho chế độ xem của bạn bằng cách sử dụng khung sẽ không hoạt động vì nó sẽ xung đột với quy tắc bố cục tự động.

Nếu bạn cần thay đổi chiều cao của một cái nhìn với cách bố trí tự động kích hoạt, bạn sẽ cần phải tạo ra một IBOutlet cho hạn chế chiều cao của bạn và sửa đổi trong thời gian chạy, ví dụ:

@IBOutlet weak var heightConstraint: NSLayoutConstraint! 

self.heightConstraint.constant = 200 
+0

Phương pháp ràng buộc hoạt động tốt. Cảm ơn bạn đã làm rõ về bố cục tự động. – Philip

+0

Giải pháp tuyệt vời mà bạn xứng đáng được hưởng. Tôi đã cố gắng thay đổi chiều cao của uiview một cách dễ dàng, không giống như tạo khung hình, sau đó gán khung và giải pháp của bạn được trang bị tốt cho nhu cầu của tôi. –

+0

Giải pháp này hoạt động giống như một sự quyến rũ đối với tôi trong iOS 8, Xcode 7.2. Tôi sử dụng kỹ thuật này để giải phóng bất động sản được thực hiện bởi biểu ngữ iad khi nó không nhận được quảng cáo. Tôi làm điều đó bằng cách thay đổi giới hạn chiều cao thành 1. – Jervisbay

1

Hãy thử một cái gì đó như thế này :

var someView = UITextView(frame: CGRect(x: 0, y: 0, width: **view.bounds.size.width**, height: 123)) 
     someView.layer.backgroundColor = UIColor.orangeColor().CGColor 
     view.addSubview(someView) 

Trong chế độ xem thay đổi trường hợp của bạn với chế độ xem gốc.

3

[sửa]

ps. Khi câu trả lời được chấp nhận cho biết: If you have auto layout active, setting the height for your view by using the frame won't work since it'll conflict with auto layout rules. Sự yên tĩnh của mã này thay đổi khung hình, vì vậy nếu bạn đang cố gắng sử dụng mã này với Bố cục Tự động, nó sẽ không hoạt động.


[câu trả lời ban đầu]

Bạn cũng có thể tạo ra một Extension UIView:

UIViewExtensions.swift:

import Foundation 
import UIKit 

extension UIView { 

    // MARK: - Frame 

    /** 
    Redefines the height of the view 

    :param: height The new value for the view's height 
    */ 
    func setHeight(height: CGFloat) { 

     var frame: CGRect = self.frame 
     frame.size.height = height 

     self.frame = frame 
    } 

    /** 
    Redefines the width of the view 

    :param: width The new value for the view's width 
    */ 
    func setWidth(width: CGFloat) { 

     var frame: CGRect = self.frame 
     frame.size.width = width 

     self.frame = frame 
    } 

    /** 
    Redefines X position of the view 

    :param: x The new x-coordinate of the view's origin point 
    */ 
    func setX(x: CGFloat) { 

     var frame: CGRect = self.frame 
     frame.origin.x = x 

     self.frame = frame 
    } 

    /** 
    Redefines Y position of the view 

    :param: y The new y-coordinate of the view's origin point 
    */ 
    func setY(y: CGFloat) { 

     var frame: CGRect = self.frame 
     frame.origin.y = y 

     self.frame = frame 
    } 
} 

Tôi cũng đã thêm phương pháp để thiết lập chiều rộng , X và Y. Bạn có thể sử dụng tiện ích đó trong bất kỳ chế độ xem nào bạn muốn:

yourView.setHeght(100) 
1

Bạn chỉ cần thực hiện translatesAutoresizingMaskIntoConstraints, và bằng cách thiết lập nó là true, bạn có thể viết những hạn chế của bạn thông qua mã mà không cần phải làm những thứ khác.

Ví dụ: view.translatesAutoresizingMaskIntoConstraints = true

// Đoạn mã này sẽ làm việc

view.frame = CGRect(x: self.playerChatBackground.frame.origin.x, y:          
self.playerChatBackground.frame.origin.y, width: 100.0, height: 36.0) 
Các vấn đề liên quan